c++ - 有条件地启用构造函数

标签 c++ constructor conditional

下面是我如何有条件地启用类的构造函数:

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 )
    {}
};

最佳答案

您可以在除构造函数之外的任何其他函数上,因为这样您就可以修改函数名称,包括模板参数。

Foo foo;
foo.Method<T>();

但是,对于构造函数,构造函数名称永远不会出现在您的表达式中,因此没有地方可以显式放置模板参数。你必须从一个论证中推断出来。

Foo<T> foo; // no good, assumes the type Foo is a template, not its constructor
Foo* pfoo = new Foo<T>(); // same problem

Foo foo((T*)0); // ok, deduced
Foo* pfoo = new Foo((T*)0); // same

关于c++ - 有条件地启用构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5365817/

相关文章:

c++ - 如何正确实现 `operator/` ?

c++ - 如何对对应于其他数组元素的数组元素进行排序?

javascript对象方法定义区别

mapping - 如何使用 MapStruct 1.2 有条件地映射属性?

conditional - If分支没有任何代码味道或良好实践吗?

c++ - 在 std::unordered_set<std::unique_ptr> (C++20) 中找到一个指针 T*

c++ - 将数据附加到 csv 文件,在最后一个条目之前而不是在最后一个条目之后。 C++

c++ - DLL 中的全局构造函数和 MSVCRT

javascript - 多重继承和多次调用父构造函数

html - Pandas HTML 输出条件格式 - 如果值在范围内则突出显示单元格