假设我有一个在任意容器类型上执行某些操作的函数(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.
}