以下代碼編譯並在G ++ 4.4.0和MS VC2008 Express上工作。模板中的「const const T」
#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;
}
然而,當我使用A<const int*>
理解應導致const const int* A::get() const;
。我很確定我沒有在真實的代碼中看到過類似的東西。以這種方式使用模板「合法」?
如果不是,什麼是替代品?在我的代碼中,我需要一個提供兩個「getter」方法(const/non-const)的模板類,並且可以將「const int *」作爲類型。像這樣的東西:
template<typename T> struct A{
protected:
T v;
public:
const T get() const{
return v;
}
T get(){
return v;
}
A(T v_)
:v(v_){
}
};
任何想法?
這聽起來像你有一個「不斷渴望」;) – bobobobo