模板模板参数 - 类型/值不匹配错误
template template argument - type/value mismatch error
下面是一个示例代码:
#include <stack>
#include <cstddef>
template <std::size_t N,
template <class> class Stack = std::stack
>
class Tower : protected Stack<int>
{
public:
Tower() : Stack<int>(N)
{
}
};
int main(int argc, char **argv)
{
Tower<5L> tower1();
}
我看到编译器(gcc)不高兴:
file.cpp: In function 'int main(int, char**)':
file.cpp:18:11: error: type/value mismatch at argument 2 in template parameter
list for 'template<long unsigned int N, template<class> class Stack> class Tower'
file.cpp:18:11: error: expected a template of type 'template<class> class Stack',
got 'template<class _Tp, class _Sequence> class std::stack'
file.cpp:18:21: error: invalid type in declaration before ';' token
标准堆栈容器具有以下形式:
template <class Type, class Container = deque<Type> > class stack
;
这意味着我应该可以在这里只传递一个模板参数!
关于如何解决这个问题的任何想法?谢谢
'template<class> class Stack',
got 'template<class _Tp, class _Sequence> class std::stack'
显示了问题。
这是std::stack
的样子
template<
class T,
class Container = std::deque<T>
> class stack;
如您所见,还有第二个参数。
添加:
#include <deque>
template <std::size_t N,
template <class T, class = std::deque<T>> class Stack = std::stack
>
应该让它编译。
std::stack
有多个模板参数。因此,它不能用于您的情况。您可以在 C++11 中使用模板 typedefs 解决此问题。
template <typename T>
using stack_with_one_type_parameter = std::stack<T>;
template <std::size_t N,
template <class> class Stack = stack_with_one_type_parameter
>
class Tower;
谢谢,效果很好。这是我的代码的修改:
#include <stack>
#include <queue>
#include <cstddef>
template <std::size_t N,
class T,
template <class, class> class Stack = std::stack,
class C = std::deque<T>
>
class Tower : protected Stack<T,C>
{
public:
Tower() : Stack<T,C>(N)
{
}
};
int main(int argc, char **argv)
{
Tower<5UL, int> tower1();
Tower<5UL, int, std::queue> tower2();
Tower<5UL, int, std::stack, std::deque<int> > tower3();
}
相关文章:
- 我在 .h 中有一个枚举类,并且在.cpp错误中有一个运算符重载:与"运算符<<不匹配
- 为什么我收到错误:"运算符<<不匹配?
- 错误:"模板<类_Tp,类_Dp>类 std::unique_ptr"的模板参数列表中参数 1 的类型/值不匹配
- 如何摆脱C++中的枚举不匹配错误?
- 为什么此代码编译 (C++11) 而没有类型不匹配错误
- C++ sigc::mem_fun 中的“呼叫不匹配”错误
- C++ lambda 函数中的“运算符=不匹配”错误
- C++,与"运算符="不匹配...错误
- 将构造函数添加到boost.python子类导致参数不匹配错误
- 基本代码中的"运算符=不匹配"错误
- 运算符重载,但仍然"与运算符不匹配"错误
- C++ - 模板 + 'using' 子句 - 参数不匹配错误
- 模板模板参数 - 类型/值不匹配错误
- 新建/删除运算符不匹配错误的严重程度
- c++代码中的参数不匹配错误
- 类型值与向量不匹配错误
- C++ 运算符不匹配<<错误
- LNK2038,迭代器不匹配错误,需要忽略
- QT5迁移和Boost:if.hp:宏参数不匹配错误
- x11 xGetImage不匹配错误