我正在尝试使用非类型模板参数,并遇到了我无法理解的编译错误,更不用说地址了。
我希望我的模板类的一个成员是静态的。无论出于何种原因,我可以在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。
答案 0 :(得分:0)
如果要在main
之前调用方法,可以使用全局变量:
当您的方法返回void
时,使用逗号运算符可以初始化变量:
static const auto dummy = (wibble<int, PrimeBits::Eleven>::nBits(), 0);