【发布时间】:2014-05-18 06:44:13
【问题描述】:
我打算写一个可以打印任何容器的所有数据的函数。换句话说,我可以使用不同的容器类型,例如向量、双端队列或列表,并且可以使用不同的数据类型(整数、双精度或字符串)来调用它。 模板函数可以通过编译器,但是不知道怎么调用。
#include <cstdlib>
#include <stdio.h>
#include <iostream>
#include <list>
using namespace std;
template <typename C, template <typename C> class M>
void print(M<C> data){
typename M<C>::iterator it;
for(it=data.template begin();it!=data.template end();++it){
cout<<*it<<" ";
}
cout<<endl;
}
int main(int argc, char** argv) {
list<int> data;
for(int i=0;i<4;i++){
data.push_back(i);
}
print<int>(data); //compile error
print<int, list>(data); //compile error
return 0;
}
错误信息: main.cpp:35:20: 错误: 没有匹配函数调用'print(std::list&)' main.cpp:35:20: 注意:候选人是: main.cpp:21:6: 注意:模板类 M> void print(M)
一些相关的线程: template function for multiple containers and data types http://louisdx.github.io/cxx-prettyprint/
【问题讨论】:
-
std::list有多个模板参数。你也不应该明确地给出模板参数。
标签: c++ templates containers