gpt4 book ai didi

c++ - 不完整类型的标准容器

转载 作者:行者123 更新时间:2023-11-30 03:25:46 24 4
gpt4 key购买 nike

我在容器和不完整类型方面遇到了一些问题。

我有这个代码:

template<typename T>
class IncompleteType
{ /*Class Definition*/ }

在另一个类上,我想使用不完整类型的 vector 。此类将 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/standard-library/overloading-the-output-operator-for-your-own-classes)。

那里发生的事情是你为你自己的类型和你想要的流类型重载 << 运算符,例如

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

然后您可以将任何类型的对象流式传输到字符串流中,只要您已经为它重载了流运算符。

关于c++ - 不完整类型的标准容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48829474/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com