你的點子也沒什麼,但你不能傳遞一個類型,但一個值(具體來講,函數指針>另外,通過一個模板策略提供功能 - 這是一個好主意,閱讀現代。 C++設計由安德烈Alexandrescu的。
#include <iostream>
int f(int x) { return 2 * x; }
int g(int x) { return -3 * x; }
typedef int (*F)(int);
template<F f>
int do_work()
{
return f(7);
}
int main()
{
std::cout << do_work<f>() << '\n'
<< do_work<g>() << '\n';
}
OR
int calculate() { return 4; }
struct F { int do_something_with(int x) { return 2 * x; } };
struct G { int do_something_with(int x) { return -3 * x; } };
// or, make these functions static and use Operator::do_something_with() below...
template<typename Operation>
int do_work()
{
int v = calculate(7);
return Operation().do_something_with(v);
}
int main()
{
std::cout << do_work<F>() << '\n'
<< do_work<G>() << '\n';
}
+1:非常好的解決方案。不適用於支持我的問題的問題,但作爲一般解決方案非常好! – 2010-10-25 19:45:12