更改template <class T, list<int> t>
为template <class T, list<int> &t>
:
template <class T, list<int> &t>
^^^ //note &t
class Tops
{
private:
list<stack<T>> tops;
public:
list getTops() {
}
};
您不能这样做的原因是因为在编译时无法解析和替换非常量表达式。它们可能会在运行时发生变化,这需要在运行时生成新模板,这是不可能的,因为模板是一个编译时概念。
以下是标准允许的非类型模板参数(14.1 [temp.param] p4):
A non-type template-parameter shall have one of the following
(optionally cv-qualified) types:
- integral or enumeration type,
- pointer to object or pointer to function,
- reference to object or reference to function,,
- pointer to member.
来源答案:https ://stackoverflow.com/a/5687553/1906361