C++中,模板类的常量静态成员函数的初始化问题

代码如下
template<class T>
class A{
private:
static const T x;
。。。
。。
};

template<class T>
int A<T>::x=0;

template<class T>
float A<T>::x=1.0f;

有两个问题:
以上代码报错,说我重定义了常量静态成员变量,可是问题不同的模板实例需要不同的变量值,这种情况下应该如何实现?
关于初始化的位置问题,是应该放在头文件中还是应该放在实现文件中?

你想声明什么类型的变量?
1.int型
声明一个静态常量,因为const常量只能在声明时初始化,所以你直接在类的private部分改为:
static const int x = 0;
然后把后面
template <class T>
int A<T>::x = 0;
去掉就可以了。
2.T型
声明一个静态常量,因为const常量只能在声明时初始化,所以你直接在类的private部分改为:
static const T x = 0;
然后把后面
template <class T>
int A<T>::x = 0;
去掉就可以了。不过会面临一个问题,不知道T具体的类型,用0去初始化它可能会不合适。

template <class T>
T追问

还有,你好像没有明白我的意思。讲具体一点,我想写一个叫做color的模板类,里面有两个标志了颜色取值的上下界的静态常量;有可能通过两种类型实例化它,一个是unsigned char类型0~255, 还有float 类型0.0f~1.0f。因此上下界必须针对不同的类型设定不同的值,这个问题如何解决?

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-06-01
你原来设计的是一个静态变量,不可以再给他赋值啊,你要赋值应该在类中赋值。
那个初始化,应该是在main函数中要用到该模板时直接用一个现实的类型代替T就可以了。
额,那个,还有啊,说一句,要用类中的私有元素只能通过类中的函数,或是构造函数实现,你在类外怎么能直接用啊。
第2个回答  2013-05-31
template<>
int A<int>::x=0;

template<>
float A<float>::x=1.0f;本回答被提问者采纳
第3个回答  2013-05-31
static const T x;

改成
static const int x;或者static const float x;
相似回答