【发布时间】:2013-12-25 17:33:57
【问题描述】:
一个模板化的成员函数,在参数列表中没有使用模板参数,可以通过以下形式调用:
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>() 作为解决方法。
【问题讨论】:
-
虚拟参数几乎是我能够完成这项工作的唯一方法......
-
所以其他人也没有看到除了解决方法之外的可能性。伤心。但是,谢谢你的链接。奇怪的是,语言一方面允许声明和定义这些构造函数,另一方面却不能使用。一个可能的语法可能是:
D d<int>;唉,这可能与模板化变量(C++14?)发生冲突。