Есть ли способ, которым я могу сделать функцию, которая принимает контейнер с определенным типом (скажем, 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);
c++
templates
stl
containers
chatzich
источник
источник
Ответы:
Вы можете создать
foo
шаблон функции, используя параметр шаблона шаблона для типа контейнера.например
ЖИТЬ
источник
std::string
, так что ..В зависимости от того, хотите ли вы перегрузить
foo
для других случаев или нетВы можете использовать другой тест
std::is_same
, например,std::is_convertible
чтобы разрешитьисточник
Вы можете рассмотреть возможность использования итераторов вместо этого. Промежуточный результат может выглядеть так
Теперь с помощью вызываемого шаблона:
Мы только что научились использовать то, что уже предлагает STL.
источник
Добавляя к ответу @ songyuanyao, я думаю, что мы можем обобщить его следующим образом:
источник