Le code suivant compile et fonctionne sur G ++ 4.4.0 et MS VC2008 Express."const const T" dans le modèle
#include <iostream>
template<typename T> struct A{
protected:
T v;
public:
const T get() const{
return v;
}
A(T v_)
:v(v_){
}
};
class B: public A<const int*>{
public:
void doSomething() const{
const int* tmp = get();
std::cout << *tmp << std::endl;
}
B(const int* p)
:A<const int*>(p){
}
};
int main(int argc, char** argv){
int a = 134;
B b(&a);
const B& c = b;
b.doSomething();
c.doSomething();
return 0;
}
Cependant, si je comprends bien l'aide A<const int*>
devrait aboutir à const const int* A::get() const;
. Et je suis sûr que je n'ai rien vu de tel dans le vrai code. Est-ce que l'utilisation du modèle est "légale"?
Sinon, quelles sont les alternatives? Dans mon code, j'ai besoin d'une classe de template qui fournit deux méthodes "getter" (const/non-const), et peut prendre un "const int *" comme type. Quelque chose comme ceci:
template<typename T> struct A{
protected:
T v;
public:
const T get() const{
return v;
}
T get(){
return v;
}
A(T v_)
:v(v_){
}
};
Des idées?
On dirait que vous avez un «besoin constant»;) – bobobobo