我在类模板中初始化静态成员所需的语法有问题。这是代码(我试图尽可能地减少它):
template <typename T>
struct A
{
template <typename T1>
struct B
{
static T1 b;
};
B<T> b;
typedef B<T> BT;
T val() { return b.b; }
};
template <typename T>
T A<T>::BT::b;
struct D
{
D() : d(0) {}
int d;
};
int main()
{
A<D> a;
return a.val().d;
}
使用g++
,我得到的错误是:
error: too few template-parameter-lists
任何想法如何初始化b?
请注意,我想保留typedef,就像在我的真实代码中一样,B比这更复杂。
答案 0 :(得分:6)
将b
的定义更改为以下内容:
template <typename T> template<typename T1>
T1 A<T>::B<T1>::b;
请注意,typedef和B<T1>
不一定指定相同的类型:当typedef依赖T
传递给B
时,B<T1>
依赖于模板参数T1
正在传递。因此,您无法使用typedef
在b
中为B<T1>
指定定义。