Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 不完整类型的标准容器_C++_Templates_Polymorphism_C++ Standard Library - Fatal编程技术网

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