可以使用以下形式调用模板化成员函数(参数列表中未使用模板参数):
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>()
作为解决方法。
答案 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;
}
};