【问题标题】:How Do I Make a STL Stack Use a Template Parameter?如何使 STL 堆栈使用模板参数?
【发布时间】:2014-12-15 01:40:41
【问题描述】:

简短而甜蜜:我正在尝试以接受泛型变量的方式使用 C++ 的 STL 堆栈。根据我在网上找到的代码,我正在尝试:

template <class T>
class ingredient{};
stack <ingredient> Sandwich;

直观地说,这似乎应该有效,但我收到“无效声明”错误。我做错了什么?

【问题讨论】:

  • 你没有ingredient类;你有一个 ingredient&lt;T&gt; 类。对于某些类型 T,您需要使用 stack&lt;ingredient&lt;T&gt; &gt; 实例化 stack

标签: c++ templates stl stack


【解决方案1】:

std::stack 以及其他标准容器必须使用具体类型进行实例化。所以假设你有

class ingredient {};

你声明了一堆配料:

std::stack<ingredient> Sandwich;

如果ingredient本身是一个模板,你必须在实例化堆栈时指定它的参数:

std::stack<ingredient<int>> Sandwich;

【讨论】:

  • 感谢您的回复,但实际上并不能解决问题。我已更新代码以包含类成分{};并按照建议更改了堆栈参数,但它仍然给我错误。
  • @Mock 您需要指定错误。我的猜测是你需要#include &lt;stack&gt; 并在你的声明前加上std:: 就像在这个答案中一样。
【解决方案2】:

ingredient 不是类型。 ingredient&lt;T&gt; 是一个类型。

您需要使用另一种类型,它将用于定义ingredient

例如:

struct Ham {};

stack <ingredient<Ham>> Sandwich;

【讨论】:

    【解决方案3】:

    你没有。 stack 是一个 template,它将一个类型作为其第一个参数。你不能给它一个template

    你可以得到类似boost::anyboost::variant 的东西并将它们存储在stack 中。 variant 是一个带有帮助函数的标记联合,可以存储一组类型中的一个。 any 是一个类型安全的值语义包装器,大致相当于 void*:您可以获取该值,但前提是您知道确切的类型。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-09-08
      • 1970-01-01
      • 2019-02-03
      • 1970-01-01
      • 1970-01-01
      • 2011-02-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多