c++ - 如何模板容器?
问题描述
我有这个函数,我想将它用于字符串容器,比如vector<string>
or set<string>
。显然,模板化似乎是最好的解决方案,但我不确定如何模板化容器。我试过这个但它不起作用:
template<class T>
string pack_addrs(T<string>& caddrs) {
string res = "";
for (string addr : caddrs) {
res += addr + ",";
}
return res.substr(0, res.size()-1);
}
解决方案
当模板参数本身是模板类型时,您可以为其使用模板模板参数,例如:
template <template<class...> class Container>
string pack_addrs(const Container<string>& caddrs) {
string res;
for (const string &addr : caddrs) {
res += addr + ",";
}
return res.substr(0, res.size()-1);
}
此代码将允许您传入任何接受std::string
作为其第一个模板参数的模板化容器(即使它需要额外的模板参数,如分配器等),并且满足range-for 循环的要求。
推荐阅读
- javascript - 上传插入为 html 的 trix 文件附件
- python - 如何在一个背景图像上移动播放器?
- c# - Asp.Net 缺少 IdentityModel.cs
- elasticsearch - Kibana 致命错误(服务器尚未准备好)
- python - 在python中将ndjson转换为json
- python - S3ToRedshiftOperator 无法获取凭据
- python - 颤振与python的连接
- javascript - JS clearInterval 的另一个函数属性
- javascript - 我需要处理哪些文件才能为我在 Redash 应用程序上创建的新页面添加路由?
- python - Django在注释时不能使用order_by