Existe alguma maneira que eu possa fazer uma função que pega um contêiner com um tipo específico (digamos std::string
) como parâmetro
void foo(const std::container<std::string> &cont)
{
for(std::string val: cont) {
std::cout << val << std::endl;
}
}
e chamá-lo para todos os tipos de contêiner stl como entrada? como acima?
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
fonte
fonte
Respostas:
Você pode criar
foo
um modelo de função usando um parâmetro de modelo para o tipo de contêiner.por exemplo
VIVER
fonte
std::string
, então ..Dependendo se você deseja sobrecarregar
foo
para outros casos ou nãoVocê pode usar um teste diferente para
std::is_same
, comostd::is_convertible
permitirfonte
Você pode considerar o uso de iteradores. Um resultado intermediário pode parecer
Agora, usando um modelo que pode ser chamado:
Acabamos de aprender a usar o que o STL já oferece.
fonte
Adicionando à resposta de @ songyuanyao, acho que podemos generalizá-la ainda mais para:
fonte