C++ 模板参数:找不到匹配的调用 #包括 使用std::vector; 模板 无效测试(){ xA; a、 推回(1); } int main(){ test(); 返回0; }
出于某种原因,我没有得到匹配的呼叫错误,尽管我的期望。为什么会发生这种情况?不接受一个参数,而是接受两个参数(有C++ 模板参数:找不到匹配的调用 #包括 使用std::vector; 模板 无效测试(){ xA; a、 推回(1); } int main(){ test(); 返回0; },c++,templates,C++,Templates,出于某种原因,我没有得到匹配的呼叫错误,尽管我的期望。为什么会发生这种情况?不接受一个参数,而是接受两个参数(有分配器),因此它不能与只应该接受一个参数的模板匹配。您需要更改为: #include <vector> using std::vector; template<template<typename> class x> void test() { x<int> a; a.push_back(1); } int main(
分配器),因此它不能与只应该接受一个参数的模板匹配。您需要更改为:
#include <vector>
using std::vector;
template<template<typename> class x>
void test() {
x<int> a;
a.push_back(1);
}
int main() {
test<vector>();
return 0;
}
模板
//或:
模板
您还需要更改函数的返回类型,因为x
不太可能是void
请注意,如果使用带有两个typename
的版本,则需要在返回语句中指定每个参数(例如x
),这就是为什么您应该选择可变版本(typename…
)。std::vector模板如下所示:
template <template <typename, typename> class x>
// or:
template <template <typename... > class x>
模板<
T类,
类分配器=std::分配器
>类向量;
因此您有typename T和它的分配器,因此正确的代码应该是:
template<
class T,
class Allocator = std::allocator<T>
> class vector;
模板
无效测试(){
x();
}
类型x
在哪里定义?为什么要从void
函数返回ing?请看一下std::vector声明。您在测试函数中尝试做什么?请参阅以获取一些语法灵感。因此我应该列出每个模板参数?@RomaValcer Yes,或者使用可变版本。
template<template<typename,typename> class x>
void test() {
x<int, std::allocator<int>>();
}