¿Hay alguna manera de que pueda hacer una función que tome un contenedor con un 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;
}
}
y llamarlo para cada tipo de contenedor stl como entrada? como arriba?
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
fuente
fuente
Respuestas:
Puede hacer
foo
una plantilla de función tomando un parámetro de plantilla de plantilla para el tipo de contenedor.p.ej
EN VIVO
fuente
std::string
, así que ...Dependiendo de si desea sobrecargar
foo
para otros casos o noPuede usar una prueba diferente para
std::is_same
, comostd::is_convertible
permitirfuente
Es posible que desee considerar el uso de iteradores en su lugar. Un resultado intermedio puede parecer
Ahora usando una plantilla invocable:
Acabamos de aprender a usar lo que el STL ya ofrece.
fuente
Agregando a la respuesta de @ songyuanyao, creo que podemos generalizarlo aún más a:
fuente