Пусть у меня есть функция, которая делает что-то на любом типе контейнера (C++ 11):Pass шаблон функции для другой функции
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);
}
Теперь предположим, что у меня есть различные функции, так же, как бар, и я хочу передать одну из этих функций в Foo, то Foo будет выглядеть примерно так:
template<class funcType>
void foo(funcType func) {
std::vector<int> vec = { 1, 2, 3 };
func(vec);
}
Однако, называя Foo так:
foo(bar);
не работает (довольно ясно, так как бар не функция, а шаблон функции). Есть ли хорошее решение для этого? Как я должен определить foo, чтобы сделать эту работу?
EDIT: здесь минимальный compileable пример, как потребовано в комментариях ...
#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.
}
у вас отсутствует минимальный компилируемый пример –
Почему вы используете указатели функций использования? Я считаю, что использование функтора было бы лучше здесь. – AlexTheo
@AlexTheo Спасибо за ваш комментарий. Конечно, используя функторы, решение простое! Боб опубликовал аналогичное решение в качестве ответа. Я пойду с этим! – fdlm