是否可以使用以后的类型定义创建模板类?

时间:2014-09-11 15:35:54

标签: c++ templates

假设这个伪代码:

Generic<unknown_type>* p;

if (type == A)
 p = new Generic<AClass>;
else if (type == B)
 p = new Generic<BClass>;
else
 p = new Generic<CClass>;

是否可以在没有类型的情况下创建指向模板类的指针?

3 个答案:

答案 0 :(得分:2)

可以声明模板类,使用指针,然后提供定义。但这实际上并不是你的代码试图做的事情。

您尝试声明并使用类型不完整的变量。这是不允许的。然而,您可以参数化整段代码,因此它也成为一个模板。然后它更像是:

Generic<TypeParam>* p = new Generic<TypeParam>;

并且取决于TypeParam,可以扩展(仅在编译时)到您显示的三种情况中的任何一种。

要在运行时进行类型选择,您需要一个公共基类。模板特化不会以任何方式通过继承自动关联。

答案 1 :(得分:1)

您要做的是在执行期间确定模板类型,但这否定了C ++中模板的本质,这些模板旨在在编译期间确定。

因此,你想做的事情是不可能的。

答案 2 :(得分:0)

没有。那是不可能的。

Generic<AClass>Generic<BClass>Generic<CClass>都是不同的类型,没有公共基类。