这两个静态模板类成员函数调用之间的差异是什么?

时间:2018-03-30 03:40:24

标签: c++ templates c++17 non-type

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

我希望我的模板类的一个成员是静态的。无论出于何种原因,我可以在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。

1 个答案:

答案 0 :(得分:0)

如果要在main之前调用方法,可以使用全局变量: 当您的方法返回void时,使用逗号运算符可以初始化变量:

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