我只想执行以下操作:

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> >无法使用,也需要默认的构造函数。

09-06 08:57