不完整类型的标准容器

Standard container for incomplete types

本文关键字:标准 类型      更新时间:2023-10-16

我在容器和不完整类型的情况下有一个小问题。

我有此代码:

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);

有没有办法有一个容器来不完整的类型?

这是实现多态性的错误方法吗?

谢谢!

您没有不完整的类型 - 那里有一个类模板。它通常会吸引到C 的新人,但是该模板具有不同类型的实例化是(对编译器/类型系统(完全不相关

模板本身也不是实例化的"基类" - 如果不提供其模板类型参数,则不能使用它。

当您谈论的是"序列化到字符串"时,我想知道您是否正在寻找流媒体操作员 - 专门流到字符串流(例如,请参见https://learn.microsoft.com/en-us/cpp/标准图书馆/超载 - 输出式服务器,为自己的级别(。

发生的事情是您超载&lt;&lt;您自己类型的操作员和所需的流类型,例如

std::ostringstream& operator<<(std::ostringstream& i_stream, const MyType& i_val) {
  i_stream << "( " << i_val.GetValue1() << ", " << i_val.GetValue2() << " )" << std::endl;
  return i_stream;
}

然后,只要您将流动器的流动器重载超载,就可以将任何类型的对象流式传输到字符串流中。