【发布时间】:2018-02-16 15:02:07
【问题描述】:
我在容器和不完整类型方面遇到了一点问题。
我有这个代码:
template<typename T>
class IncompleteType
{ /*Class Definition*/ }
在另一个类上,我想使用不完整类型的向量。 此类将 c 风格的结构序列化为字符串,因此无论我提供什么类型,行为都是相同的。
但是,当我这样做时:
std::vector<IncompleteType>
或者这个:
std::vector<IncompleteType*>
编译器抱怨我没有为模板类提供参数列表。
我想做的是这样的:
IncompleteType<Type1> a;
IncompleteType<Type2> b;
std::vector<IncompleteType*> vector;
vector.push_back(&a);
vector.push_back(&b);
有没有办法让容器容纳不完整的类型?
这是实现多态的错误方法吗?
谢谢!
【问题讨论】:
-
使用
std::vector<IncompleteType<my_type>> -
顺便说一句,您的班级声明
class IncompleteType<T>无效。 C++ 编译器不会编译它。 -
既然您提到了多态性,请注意如果您尝试存储派生类型,
std::vector<Base>其中Base是基本类型会导致对象切片。 -
@S.M.你是对的,这是一个错字。我编辑了它:)
-
不完整的类型类似于
class Incomplete;。您在这里拥有的是一个类模板,它根本不是一种类型。您可能会将其与 Java 或 C# 中的泛型之类的东西混在一起。
标签: c++ templates polymorphism c++-standard-library