静态模板类成员函数的这两个调用之间有什么区别?

what's the diff between these two calls of static template class member function?

本文关键字:调用 两个 之间 区别 什么 成员 函数 静态      更新时间:2023-10-16

我正在尝试非类型模板参数,并且遇到了我无法理解的编译器错误,更不用说地址了。

我希望我的模板类的成员之一是静态的。无论出于何种原因,我都可以从main()中成功调用静态类成员函数,但在此处所示之前却不:

enum class PrimeBits {
    Two = 2,
    Three = 2,
    Five = 3,
    Seven = 3,
    Eleven = 4
};
template <typename T, enum PrimeBits P>
class wibble {
    public:
        wibble() {};
        static void nBits () {
            std::cout << "Bits: " << static_cast<int>(P) << std::endl;
        }
};
wibble<int, PrimeBits::Eleven>::nBits();        // compiler error
// specializing member 'wibble<int, (PrimeBits)4>::nBits' requires 'template<>' syntax
int main () {
    wibble<int, PrimeBits::Eleven>::nBits();        // compiles & runs ok 
}

这是与GCC版本7.3.0一起使用-std = gnu 17 set。

如果要在main之前调用方法,则可以使用全局变量:当您的方法返回void时,使用逗号操作员能够初始化一个变量:

static const auto dummy = (wibble<int, PrimeBits::Eleven>::nBits(), 0);
相关文章: