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>>();
}