gpt4 book ai didi

boost - enable_if 和构造函数

转载 作者:行者123 更新时间:2023-12-04 18:17:28 24 4
gpt4 key购买 nike

这有什么问题?

我认为这应该在使用 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com