Czy jest jakiś sposób, w jaki mogę stworzyć funkcję, która przyjmuje kontener określonego typu (powiedzmy std::string
) jako parametr
void foo(const std::container<std::string> &cont)
{
for(std::string val: cont) {
std::cout << val << std::endl;
}
}
i nazwać to dla każdego typu kontenera STL jako dane wejściowe? jak wyżej?
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
źródło
źródło
Odpowiedzi:
Można utworzyć
foo
szablon funkcji, biorąc parametr szablonu szablonu dla typu kontenera.na przykład
RELACJA NA ŻYWO
źródło
std::string
, więc ..W zależności od tego, czy chcesz przeciążać
foo
inne przypadki, czy nieMożesz użyć innego testu
std::is_same
, na przykładstd::is_convertible
zezwalaćźródło
Zamiast tego możesz rozważyć użycie iteratorów. Wynik pośredni może wyglądać
Teraz za pomocą szablonu na żądanie:
Właśnie nauczyliśmy się korzystać z tego, co już oferuje STL.
źródło
Dodając do odpowiedzi @ songyuanyao, myślę, że możemy ją uogólnić dalej:
źródło