#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;
}
由於某種原因,儘管我有我的期望,但沒有找到匹配的呼叫錯誤。爲什麼會發生?模板模板參數:找不到匹配的呼叫
#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;
}
由於某種原因,儘管我有我的期望,但沒有找到匹配的呼叫錯誤。爲什麼會發生?模板模板參數:找不到匹配的呼叫
std::vector
不帶一個參數,但是兩個(有Allocator
),所以它不能與一個模板只匹配一個。您需要更改爲:
template <template <typename, typename> class x>
// or:
template <template <typename... > class x>
你還需要改變你的函數的返回類型,因爲它是不可能的x<int>
是void
。
請注意,如果您使用的版本有兩個typename
,你就需要指定return語句(如x<int, std::allocator<int>>
),這就是爲什麼你應該更喜歡一個可變版本(typename...
)每個參數。
所以我應該列出每個模板參數? – RomaValcer
@RomaValcer是或使用可變版本。 – Holt
的std :: vector模板看起來如下:
template<
class T,
class Allocator = std::allocator<T>
> class vector;
讓你有類型名T和分配的,所以正確的代碼應該是:
template<template<typename,typename> class x>
void test() {
x<int, std::allocator<int>>();
}
哪裏型'x'界定?你爲什麼從'void'函數返回? –
看看std :: vector聲明。 –
你在做什麼測試功能..? –