Hin*_*sum 2 c++ containers templates class typename
我有一个非常简单的测试程序,如下所示:
#include<vector>
#include<iostream>
using namespace std;
template<typename C, typename E>
void f(const C<E>& container){
cout<<container.size()<<endl;
}
int main(){
vector<int> i;
f(i);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
它无法使用gcc 4.1.2进行编译.错误信息是:
templateContainer.cpp:5: error: ‘C’ is not a template
templateContainer.cpp: In function ‘int main()’:
templateContainer.cpp:10: error: no matching function for call to ‘f(std::vector<int, std::allocator<int> >&)’
Run Code Online (Sandbox Code Playgroud)
Whi*_*TiM 10
您可以使用模板模板参数(并注意std::vector实际上需要多个模板参数[元素类型和分配器类型]):
template<template <typename...> class C, typename... E>
void f(const C<E...>& container){
cout<<container.size()<<endl;
}
Run Code Online (Sandbox Code Playgroud)
如果您不需要类型分解,则可以简单地使用普通模板.
template<typename C>
void f(const C& container){
cout<<container.size()<<endl;
}
Run Code Online (Sandbox Code Playgroud)
您还可以从STL容器中获取typedef:例如,如果您想知道容器所持有的元素类型,value_type那么就可以使用.
template<typename C>
void f(const C& container){
using ValueType = typename C::value_type;
cout<<container.size()<<endl;
}
Run Code Online (Sandbox Code Playgroud)