有条件地启用构造函数
以下是我如何有条件地启用类的构造函数:
struct Foo
{
template<class T>
Foo( T* ptr, boost::enable_if<is_arithmetic<T> >::type* = NULL )
{}
};
我想知道为什么我需要通过虚拟参数进行启用。为什么我不能只写:
struct Foo
{
template<class T>
Foo( boost::enable_if<is_arithmetic<T>, T>::type* = NULL )
{}
};
Here is how I can conditionally enable a constructor of a class :
struct Foo
{
template<class T>
Foo( T* ptr, boost::enable_if<is_arithmetic<T> >::type* = NULL )
{}
};
I would like to know why I need to do the enabling via a dummy parameter. Why can I not just write :
struct Foo
{
template<class T>
Foo( boost::enable_if<is_arithmetic<T>, T>::type* = NULL )
{}
};
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您可以使用除构造函数之外的任何其他函数,因为这样您就可以修改函数名称,包括模板参数。
但是,对于构造函数,构造函数名称永远不会出现在表达式中,因此没有地方可以显式放置模板参数。你必须从论证中推断出来。
You can on any other function but the constructor, because then you can modify the function name including the template arguments.
With a constructor, though, the constructor name never appears in your expression, so there's no place to explicitly put the template parameter. You have to deduce it from an argument.