我想从另一个模板化类(此处为A)继承并执行静态成员专门化(此处为int var)的模板化类(此处为C),但我不能得到正确的语法,这样做(如果可能的话模板化子类和模板化基类的静态成员专业化
#include <iostream>
template<typename derived>
class A
{
public:
static int var;
};
//This one works fine
class B
:public A<B>
{
public:
B()
{
std::cout << var << std::endl;
}
};
template<>
int A<B>::var = 9;
//This one doesn't works
template<typename type>
class C
:public A<C<type> >
{
public:
C()
{
std::cout << var << std::endl;
}
};
//template<>
template<typename type>
int A<C<type> >::var = 10;
int main()
{
B b;
C<int> c;
return 0;
}
我把与非模板类(这里B工作的例子),我可以得到VAR的静态成员的专业化,但对C说只是不起作用
以下是gcc告诉我的:
test.cpp: In constructor ‘C<type>::C()’:
test.cpp:29:26: error: ‘var’ was not declared in this scope
test.cpp: At global scope:
test.cpp:34:18: error: template definition of non-template ‘int A<C<type> >::a’
我使用gcc版本4.6.3,感谢您的帮助
“我不认为有任何办法部分专门化模板类静态成员”?问题是什么?静态成员的类型可以取决于作者想要的任何方式模板的参数...(接近downvote。请修复此问题) – 2012-07-11 09:14:24
@KirillKobelev错误的措辞;问题是*定义*静态成员(只能为完整的专业化)。请看一下。 – ecatmur 2012-07-11 09:20:37
现在好多了。谢谢。 – 2012-07-11 09:22:32