我只想执行以下操作:
template <typename T>
class gvar {
private:
T var;
public:
gvar(T var) : var(var) {}
};
std::stack<gvar> some_stack;
g++吐出各种有关gvar不是类型的错误。是否可以通过一些相对简单的方法来实现?我不想使用boost::any/boost::variant。
编辑:
要澄清我想要什么:
一个std::stack,可以容纳不同类型的变量(仅原始类型就可以了)。
最佳答案
通常,如果您想要多态性,则可以使用基类:
class GVarBase
{
public:
virtual ~GVarBase() {}
};
template <typename T>
class GVar: public GVarBase
{
public:
private:
T mVar;
};
std::stack< std::unique_ptr<GVarBase> > stack;
请注意,使用当前的代码,即使
std::stack< GVar<int> >
无法使用,也需要默认的构造函数。