use*_*193 0 c++ boost enable-if
我有一个模板化的类,我想只在类型为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 );
}
Run Code Online (Sandbox Code Playgroud)
我收到错误:"类型'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);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1192 次 |
| 最近记录: |