Предположим, у меня есть функция, которая делает что-то для произвольного типа контейнера (C ++ 11):
template<class containerType>
void bar( containerType& vec ) {
for (auto i: vec) {
std::cout << i << ", ";
}
std::cout << '\n';
}
Я могу вызвать эту функцию из другой функции, подобной этой:
void foo() {
std::vector<int> vec = { 1, 2, 3 };
bar(vec);
}
Теперь предположим, что у меня есть разные функции, такие как bar, и я хочу передать одну из этих функций в foo, тогда foo будет выглядеть примерно так:
template<class funcType>
void foo( funcType func ) {
std::vector<int> vec = { 1, 2, 3 };
func(vec);
}
Однако вызов foo выглядит так:
foo(bar);
не работает (довольно ясно, так как bar - это не функция, а шаблон функции).Есть ли хорошее решение для этого?Как мне определить foo, чтобы эта работа работала?
РЕДАКТИРОВАТЬ: вот минимальный компилируемый пример, как того требуют комментарии ...
#include <iostream>
#include <vector>
#include <list>
template<class containerType>
void bar( containerType& vec ) {
for (auto i: vec) {
std::cout << i << ", ";
}
std::cout << '\n';
}
template<typename funcType>
void foo(funcType func) {
std::vector<int> vals = { 1, 2, 3 };
func(vals);
}
int main() {
// foo( bar ); - does not work.
}