Pie*_*BdR 4 c++ static templates initialization
我在类模板中初始化静态成员所需的语法有问题.这是代码(我试图尽可能地减少它):
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;
}
Run Code Online (Sandbox Code Playgroud)
有了g++,我得到的错误是:
error: too few template-parameter-lists
Run Code Online (Sandbox Code Playgroud)
有任何想法如何初始化b?
请注意,我想保留typedef,就像在我的真实代码中一样,B比这更复杂.
将定义更改b为以下内容:
template <typename T> template<typename T1>
T1 A<T>::B<T1>::b;
Run Code Online (Sandbox Code Playgroud)
请注意,typedef B<T1>并不一定指定相同的类型:当typedef依赖于T传递时B,B<T1>依赖于T1传递的模板参数.因此,您无法使用typedef此处为bin 指定定义B<T1>.