我有一个模板类,我只想在类型为 double 时启用某个构造函数。这段代码有什么问题?
template<typename T>
class B: public A<T>
{
public:
B(int arg1=0, typename boost::enable_if_c<boost::is_same<T, double>::value>=0);
}
int main(int argc,char *argv[])
{
B<double> B( 6, 6 );
}
我收到错误:“类型为‘boost::enable_if_c’的参数的默认参数的类型为‘int’”,但我不确定这是什么意思。
非常感谢您。
最佳答案
嗯,你真的不能那样做。如果你提供一些T
这不是 double
,然后编译器将尝试解析 enable_if_c<false>::type
,这将失败,使整个类实例化失败,而不仅仅是构造函数。
您可以使用 C++11 的默认函数模板参数来实现相同的目的。
下面的代码使用 boost
的 C++11 版本实现了这一点您在代码中使用的功能:
#include <type_traits>
template<typename T>
class B {
public:
// T == double -> this ctor can be used
template<typename U = T, class = typename std::enable_if<std::is_same<U, double>::value>::type>
B(int arg1, double arg2) {}
// Default ctor, available to every class.
B() {}
};
int main(int argc,char *argv[])
{
B<double> b_double( 6, 6 );
B<int> b_int;
// This line fails
//B<int> b_fails(6, 6);
}
关于c++ - 在构造函数中 boost enable_if,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12115934/