C++ 不完整类型的标准容器
我对容器和不完整的类型有点问题 我有以下代码:C++ 不完整类型的标准容器,c++,templates,polymorphism,c++-standard-library,C++,Templates,Polymorphism,C++ Standard Library,我对容器和不完整的类型有点问题 我有以下代码: template<typename T> class IncompleteType { /*Class Definition*/ } 模板 类不完全类型 {/*类定义*/} 在另一个类中,我想使用不完整类型的向量。 这个类将c风格的结构序列化为字符串,因此无论我提供什么类型,行为都是相同的 但是,当我这样做时: std::vector<IncompleteType> std::vector 或者这个: std::ve
template<typename T>
class IncompleteType
{ /*Class Definition*/ }
模板
类不完全类型
{/*类定义*/}
在另一个类中,我想使用不完整类型的向量。
这个类将c风格的结构序列化为字符串,因此无论我提供什么类型,行为都是相同的
但是,当我这样做时:
std::vector<IncompleteType>
std::vector
或者这个:
std::vector<IncompleteType*>
std::vector
编译器抱怨我没有为模板类提供参数列表
我想做的是这样的:
IncompleteType<Type1> a;
IncompleteType<Type2> b;
std::vector<IncompleteType*> vector;
vector.push_back(&a);
vector.push_back(&b);
不完全a型;
不完全b型;
std::向量;
向量。推回(&a);
向量。推回(&b);
有没有一种方法可以让容器保存不完整的类型
这是实现多态性的错误方法吗
谢谢 您没有不完整的类型-您有一个类模板。它经常捕捉到C++的新成员,但是不同类型的模板的实例化(对于编译器/类型系统)完全无关。 模板本身也不是实例化的“基类”——如果不提供模板类型参数,就不能使用它 当您谈论“序列化到字符串”时,我想知道您是否在寻找流媒体运营商,特别是流媒体到字符串流(参见示例)
发生的情况是,您重载了Use
std::vector
BTW类声明class incomplettetype
无效。C++编译器不会编译它。既然你提到多态性,请注意<代码> STD::vector < /COD>(代码< > BASE/COD>)是一种基本类型,如果你试图存储派生类型,它会引起对象切片。@ S.M.你说得对,那是一个打印错误。我编辑了它:)不完整的类型类似于类不完整代码>。这里有一个类模板,它根本不是一个类型。您可能把它与Java或C#中的泛型混淆了。谢谢,我将尝试解决这个问题,应该不难。感谢您选择ostringstream
而不是ostream
?@Caleth的原因-主要是因为原始海报谈到了将结构流到字符串。普通的ostream可以用于二进制流/归档。
std::ostringstream& operator<<(std::ostringstream& i_stream, const MyType& i_val) {
i_stream << "( " << i_val.GetValue1() << ", " << i_val.GetValue2() << " )" << std::endl;
return i_stream;
}