web-dev-qa-db-ja.com

ジェネリック引数として特定のタイプを持つSTLコンテナー

特定のタイプのコンテナを取る関数を作成する方法はありますか(std::string)パラメータとして

void foo(const std::container<std::string> &cont)
{
   for(std::string val: cont) {
      std::cout << val << std::endl;
   }
}

入力としてすべてのタイプのstlコンテナーに対してそれを呼び出しますか?上記のように?

std::set<std::string> strset;
std::vector<std::string> strvec;
std::list<std::string> strlist;

foo(strset);
foo(strvec);
foo(strlist);
25
chatzich

代わりにイテレータを使用することを検討してください。中間結果は次のようになります

template<typename Iter>
void foo(Iter begin, Iter end) {
  using T = decltype(*begin);
  std::for_each(begin, end, [] (cons T & t) {
    std::out << t << '\n';
  }
}

現在、呼び出し可能なテンプレートを使用しています:

template<typename Iter, typename Callable>
void foo(Iter begin, Iter end, Callable & c) {
  std::for_each(begin, end, c);
}

STLがすでに提供しているものを使用する方法を学びました。

0
user1624886