简短而甜蜜:我试图以接受泛型变量的方式使用C ++的STL堆栈。根据我在网上找到的代码,我正在尝试这个:
template <class T>
class ingredient{};
stack <ingredient> Sandwich;
直观地说,这似乎应该可行,但我收到“无效声明”错误。我做错了什么?
答案 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)
你不是。 stack
是template
,它将类型作为其第一个参数。你不能给它template
。
您可以获得类似boost::any
或boost::variant
的内容,并将其存储在stack
中。 variant
是带有辅助函数的标记并集,可以存储一组类型中的一个。 any
是一个类型安全的值语义包装器,围绕着void*
的粗略等价物:你可以得到该值,但前提是你知道确切的类型。