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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/292.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++;将不同模板对象存储到同一容器中的任何方法_C++_Templates - Fatal编程技术网

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

你想用它实现什么样的最终结果?我认为这是一个非常好的答案。我在另一个上丢失了变体。对我来说,这似乎是首选的方式。