不可调用的模板构造函数?

时间:2013-12-25 17:33:57

标签: c++ templates

可以使用以下形式调用模板化成员函数(参数列表中未使用模板参数):

struct C { template <class> func (); };
C c;
C.func <int>();

但是如何调用模板构造函数,它在参数列表中不使用模板参数?

struct D { template <class>  D (); };

当然

D<int> d;

不能是语法,因为这是D <int>类型变量的构造,它是类模板D<class>的实例化。

这不仅仅是一个学术问题,我用于模板化构造函数(不使用构造函数参数列表中的模板),基本上是基于策略的工厂,目前使用虚拟参数mpl::identity <mytype>()作为解决方法。

1 个答案:

答案 0 :(得分:4)

这不是我自己的知识,而是取自其他一些来源,主要是已发布的C++ template constructor

我假设,不可能在没有参数的情况下实例化模板构造函数,因为这可能会创建多个默认构造函数。模板在编译时扩展,因此在它们创建的函数上产生某种重载。默认构造函数不能重载,因此当您使用多个模板实例时,这必须失败。

除了虚拟变量之外,我只能考虑使用模板化工厂方法或类(如果在您的情况下可行)

ex :(使用int-template而不是class-template,因为我现在想不到另一个例子)

class C
{
  int i;
  C() { }
public:
  template<int I>
  static C newInstance()
  {
    C c;
    c.i = I;
    return c;
  }
};