我有一个Enum
和简单的基类,看起来像这样,
enum E
{
a,
b
};
template<E e>
struct Base
{
static int i;
};
及其子女,
struct CC
{
template<E e, class T>
struct C;
template<class T>
struct C<a, T> : Base<a>
{
void Do(int i)
{
Base<a>::i=i;
}
};
template<class T>
struct C<b, T> : Base<b>
{
void Do(int i)
{
Base<b>::i=i;
}
};
template<E e, typename T>
void Do(int i)
{
C<e,T>->Do(i);
}
};
我想在模板中传递的枚举值专用的两个结构中的任何一个中调用Do
。如果是E::a
,则拨打Do
的{{1}}或C<a>
。
我在Build之后得到的错误是C<b>
答案 0 :(得分:0)
您需要定义static
类成员变量。
在文件范围内写下:
int Base<a>::i;
int Base<b>::i;
来自CppReference:
static
关键字仅用于在类定义中声明静态成员,但不与静态成员的定义一起使用:class X { static int n; }; // declaration (uses 'static') int X::n = 1; // definition (does not use 'static')
类主体内的声明不是定义,可以声明该成员的类型不完整(
void
除外),包括声明成员的类型: