首页 > 解决方案 > 如何模板容器?

问题描述

我有这个函数,我想将它用于字符串容器,比如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);
}

标签: c++templates

解决方案


当模板参数本身是模板类型时,您可以为其使用模板模板参数,例如:

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 循环的要求。


推荐阅读