具有通用/模板化变量的 STL 容器
我只想执行以下操作:
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 (只是基元就可以了)。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(7)
因为
gvar
不是类型,它是类型模板。您需要为其指定一个模板参数:Because
gvar
isn't a type, it's a type template. You need to specify a template argument for it:您必须实例化模板类或以其他方式处理它。例如,您可以创建一个
std::stack >
,或者您可以尝试诸如 Boost::Any。You have to either instantiate the template class or approach this in some other way. For example, you can make an
std::stack<gvar<int> >
, or you could try solutions such as Boost::Any.您只需指定实例化
gvar
的类型,例如:You simply need to specify what type to instantiate
gvar
over, something like:一般来说,如果您想要多态性,您可以使用基类:
请注意,使用您当前的代码,甚至
std::stack
GVar >
不起作用,需要一个默认构造函数。In general, if you want polymorphism, you'd use a base class:
Note that with the current code you have, even
std::stack< GVar<int> >
would not work, a default constructor is required.如果您可以忍受有限的跨度,那就是您完全了解可以使用 元组。当然,您还需要提前知道类型。
在您的情况下,最好简单地表达为:
If you can suffer with a limited span, that is you know full well the length of the collection you can look at using tuples. Of course, you're also going to need to know the type in advance.
Which in your case would probably be best expressed simply as:
不,没有办法做你想做的事。更清楚地了解您试图通过此尝试解决的问题可能会让我提供解决方法。
No. There's no way to do what you're trying to do. More clarity on the problem you're trying to solve with this attempt might allow me to provide a workaround.
似乎你需要这样的东西:(
链接到 ideone 和工作示例 http://www.ideone.com/gVoLh)
这是简化的
boost::any
,所以如果可以的话,只需使用boost::any
而不是这个。Seems you need something like this:
(link to ideone with working example http://www.ideone.com/gVoLh)
This is simplified
boost::any
, so if you can, just useboost::any
instead of this.