c++ - 模板类中的静态成员初始化

标签 c++ c++11 templates sfinae

我需要在模板类内部初始化一个静态 bool 值,我尝试像 this 那样做。 。我能看到的唯一区别是我对类型参数 T 有约束,但这会导致编译错误,为什么?我该如何解决这个问题?

代码如下:

template<class T, class = typename enable_if<is_any_integral<T>::value>::type>
class fraction {
    static bool auto_reduce;

    // ...
};

template<class T, class = typename enable_if<is_any_integral<T>::value>::type>
bool fraction<T>::auto_reduce = true;

错误是:

error: nested name specifier 'fraction<T>::' for declaration does not refer into a class, class template or class template partial specialization
bool fraction<T>::auto_reduce = true;

最佳答案

也许更简单

template<class T, class V>
bool fraction<T, V>::auto_reduce = true;

当你写

template<class T, class = typename enable_if<is_any_integral<T>::value>::type>
class fraction

你说fraction是一个具有两个类型模板参数的类; std::enable_if if 部分可用于为第二个参数分配默认值(并允许启用/不启用 SFINAE 工作),但 fraction 仍然是带有两个参数的模板 class ,您必须引用这两个参数,并且无需为初始化 auto_reduce 的第二个参数重复启用/不启用/默认部分。

关于c++ - 模板类中的静态成员初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48268452/

相关文章:

c++ - omp 缩减和 lambda 函数

c++ - 引用模板的语法(别名?)

c++ - 是否有针对 C++14 或更高版本的标准化回溯和其他调试实用程序的计划?

c++ - C 和 C++ 原子之间的互操作性

c++ - 删除函数 unique_ptr

c++ - 为什么指向 int 的指针转换为 void* 而指向函数的指针转换为 bool?

c++ - clang::ast_type_traits::DynTypedNode::get() 无法推断模板参数 'T'

django - 防止 Django 模板中的整数出现 NUMBER_GROUPING

c++ - 在C++中将std::sort与迭代器和模板一起使用

c++ - 单元测试没有失败但卡在子程序调用上