假設我有一個不上的任意容器類型(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);
}
現在假設我有不同的功能一樣吧,我想通過這些功能爲foo之一,那麼富會是這個樣子:
template<class funcType>
void foo(funcType func) {
std::vector<int> vec = { 1, 2, 3 };
func(vec);
}
然而,像這樣調用foo:
foo(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.
}
您缺少最小的可編譯示例 – 2012-02-16 09:39:43
爲什麼使用使用函數指針?我相信在這裏使用函子會更好。 – AlexTheo 2012-02-16 10:27:20
@AlexTheo感謝您的評論。當然,使用函子的解決方案很簡單!鮑勃發布了類似的解決方案作爲答案。我會去的! – fdlm 2012-02-16 10:51:30