boost - enable_if 和构造函数

标签 boost enable-if

这有什么问题吗?

我认为这应该在使用enable if时起作用???

帮忙??

是否应该排除第二个构造函数?

#include <iostream>
#include <boost/type_traits.hpp>
#include <boost/utility/enable_if.hpp>



template<class T>
class integral_holder{
public:
integral_holder(T value_, typename boost::enable_if_c< boost::is_integral<T>::value>::type* ignore = 0) : value(value_){
    std::cout << "Integral" << std::endl;
}

integral_holder(T value_, typename boost::enable_if_c< boost::is_floating_point<T>::value>::type* ignore = 0) : value(floor(value_)){
    std::cout << "Floating point" << std::endl;
}

private:
  T value;

};

int main(int argc, const char * argv[])
{

   integral_holder<int> a(22);

   return 0;
}

最佳答案

当从类模板生成类并且在该过程中实例化构造函数的声明(不是它们的主体,而只是它们的“签名”)时,enable_if 类型无效,并且您会收到编译器错误。

您需要使enable_if类型依赖于构造函数的模板参数(使其成为函数模板)。然后您的目标就可以实现,因为当您使用构造函数推导函数模板参数类型时,会形成无效类型,这将触发 SFINAE 情况。

关于boost - enable_if 和构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11375596/

相关文章:

c++ - 在 C++ 中以特定的间隔速率调用方法

c++ - 简单的 C 风格结构化输入的 Spirit Qi 解析问题

c++ - 根据类模板参数值禁用成员函数

c++ - 构造函数重载和 SFINAE

c++ - enable_if 和互斥方法

c++ - 如何使用boost::beast连续流式传输文件

c++ - boost C++ 开源项目的依赖性?

c++ max_element 每n个元素

c++ - std::is_base_of 和虚基类

c++ - 在某些枚举模板情况下启用类构造函数