【发布时间】:2016-11-07 21:24:04
【问题描述】:
我想知道您是否可以拥有一个包含具有不同模板参数的对象的容器。
我正在尝试实现这样的目标:
#include <iostream>
#include <list>
template <class T>
class base
{
public:
T val;
base(T newVal): val(newVal) {};
};
class derived : public base<int>
{
public:
derived(int newVal): base(newVal) {};
};
int main ( void )
{
std::list < base<?> > base_collection;
return 0;
}
我希望我当前的项目尽可能灵活和动态,当需要新的派生类时几乎不需要额外的编码,而我当前的实现使得存在这样的列表很重要。
是否有一种常用的、有益的、干净的方式来实现这一目标?
【问题讨论】:
-
“我当前的实现使得存在这样一个 [heterogeneous] 列表很重要”。哦。这是一种反模式。你需要放弃那种设计。
-
不,你不能。
base<int>与base<float>是完全不同的类型。而且你不能将派生类对象存储在基类变量中。
标签: c++ class c++11 polymorphism containers