假设这个伪代码:
Generic<unknown_type>* p;
if (type == A)
p = new Generic<AClass>;
else if (type == B)
p = new Generic<BClass>;
else
p = new Generic<CClass>;
是否可以在没有类型的情况下创建指向模板类的指针?
答案 0 :(得分:2)
可以声明模板类,使用指针,然后提供定义。但这实际上并不是你的代码试图做的事情。
您尝试声明并使用类型不完整的变量。这是不允许的。然而,您可以参数化整段代码,因此它也成为一个模板。然后它更像是:
Generic<TypeParam>* p = new Generic<TypeParam>;
并且取决于TypeParam
,可以扩展(仅在编译时)到您显示的三种情况中的任何一种。
要在运行时进行类型选择,您需要一个公共基类。模板特化不会以任何方式通过继承自动关联。
答案 1 :(得分:1)
您要做的是在执行期间确定模板类型,但这否定了C ++中模板的本质,这些模板旨在在编译期间确定。
因此,你想做的事情是不可能的。
答案 2 :(得分:0)
没有。那是不可能的。
Generic<AClass>
,Generic<BClass>
和Generic<CClass>
都是不同的类型,没有公共基类。