如何创建STL堆栈使用模板参数?

时间:2014-12-15 01:40:42

标签: c++ templates stl stack

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

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

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

3 个答案:

答案 0 :(得分:4)

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

class ingredient {};

你宣布一堆成分:

std::stack<ingredient> Sandwich;

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

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

答案 1 :(得分:1)

ingredient不是一种类型。 ingredient<T>是一种类型。

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

例如:

struct Ham {};

stack <ingredient<Ham>> Sandwich;

答案 2 :(得分:1)

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

您可以获得类似boost::anyboost::variant的内容,并将其存储在stack中。 variant是带有辅助函数的标记并集,可以存储一组类型中的一个。 any是一个类型安全的值语义包装器,围绕着void*的粗略等价物:你可以得到该值,但前提是你知道确切的类型。