C++ C++;将不同模板对象存储到同一容器中的任何方法
有没有什么黑客可以帮我做到这一点:C++ C++;将不同模板对象存储到同一容器中的任何方法,c++,templates,C++,Templates,有没有什么黑客可以帮我做到这一点: template <class TYPE> class Hello { TYPE _var; }; 模板 同学们好 { 类型_var; }; 我想要一个去商店的方法 Hello<int> intHello and Hello<char*> charHello Hello Intello和Hello Charlo你好 放入同一容器中,例如队列/列表。否,因为它们是不同且完全不相关的类型 但是,您可以使用继承和
template <class TYPE>
class Hello
{
TYPE _var;
};
模板
同学们好
{
类型_var;
};
我想要一个去商店的方法
Hello<int> intHello and Hello<char*> charHello
Hello Intello和Hello Charlo你好
放入同一容器中,例如队列/列表。否,因为它们是不同且完全不相关的类型 但是,您可以使用继承和智能指针:
class HelloBase
{
public:
virtual ~HelloBase();
}
template <class TYPE>
class Hello : public HelloBase
{
TYPE _var;
}
std::vector<boost::shared_ptr<HelloBase> > v;
类HelloBase
{
公众:
虚拟~HelloBase();
}
模板
班级你好:公共HelloBase
{
类型_var;
}
std::向量v;
std::tr1
或std
命名空间中的实现可能支持shared_ptr
;你必须检查一下。是的,有点——但你可能不想检查。即使它们从同一个模板开始,Hello
和Hello
是完全独立和不相关的类型。包含两者的集合是异构的,包含了所有需要解决的问题
如果你坚持这样做,为了合理干净,你通常会创建一个队列/列表。首先,真正的问题是:你想要实现什么(在更高的层次上) 现在,对于这个特殊的问题,有很多选择。容器无法存储异构数据,因此您可以:
- 为所有
提供一个公共基类,并添加虚拟方法,然后使用指针,处理内存所有权(Hello
或unique\u ptr
)boost::ptr\u list
- 如果有一组精确的类型,请使用
,它是静态检查的,因此您有合理的保证boost::variant
<> LI>否则您应该考虑将其封装到一个存储类中,该类使用<代码> Boo::在封面中的任何< /代码>
公共基类是这种情况下的常用方法。如果没有理由使用多态性,那么最好使用
variant
,如果没有任何其他any
,你想用它实现什么样的最终结果?我认为这是一个非常好的答案。我在另一个上丢失了变体。对我来说,这似乎是首选的方式。