我在玩弄类模板和静态变量,看到的是:

template<int I>
struct rat
{
    static bool k;
};

bool rat<3>::k = 0; //this is line 84 of the only source file play.cpp

int main(int argc, char **argv)
{

    rat<3> r;
}


编译器错误:
play.cpp:84:错误:模板参数列表太少

我以为,当我说rat :: k时,我正在实例化该模板并为该特定模板定义静态对象,因此从那时起使用rat<3>就可以了。.为什么这不起作用?

最佳答案

应该

template<>
bool rat<3>::k = 0;


但最好将false用于bool,然后使用0,因为它更具可读性

同样,如果您想将所有模板的变量初始化为true,例如:

template<int I>
bool rat<I>::k = true;


而且您仍然可以为I = 3专门设计模板:

template<>
bool rat<3>::k = false;

09-08 01:04