c++ - 如何初始化具有类型特征的类模板的静态数据成员?

标签 c++ templates static initialization typetraits

我尝试使用类似的东西,但初始化似乎不起作用。当我删除类型特征时,它会按预期工作。

template<typename _T, typename = std::enable_if_t<std::is_integral<_T>::value>>
struct Foo
{
    static int bar;
};

template<typename _T>
int Foo<_T>::bar = 0;

如何正确初始化这样一个静态变量?

最佳答案

那是因为你没有正确使用 std::enable_if

template<typename T, typename = std::enable_if_t<std::is_integral<T>::value>>
struct Foo;

template <typename T>
struct Foo<T, false> //Partial specialization
{
  // if T is not integral, Foo becomes empty class
};

template <typename T>
struct Foo<T, true> //Partial specialization
{
    static int bar;
};

然后:

template<typename T>
int Foo<T, true>::bar = 0;

我把_T改成了T,因为名字定义为_X, __X or __x 保留用于内部实现。

关于c++ - 如何初始化具有类型特征的类模板的静态数据成员?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29457776/

相关文章:

c++ - 通过 Windows 命令行,我们如何编译 Netbeans C/C++ 应用程序?

c++ - 从函数体中推导模板参数

c - 错误 : initializer element is not constant

c++ - 如何使 QTableWidget 中的单元格小部件的背景不可选?

c++ - 如何使用 Eclipse 和 CDT 使用 MinGW 编译和运行 C++?

c++ - 在 Linux 中编译基本 QtWidgets 应用程序时出现 QtCreator 问题

C++ 模板检查类型并使用一些特定的函数

c++ - 使用 const 引用初始化成员数据

c++ - 静态成员和多线程

PHP:为什么类中的静态变量不能作为变量函数使用?