我有几个具有类似声明的函数:
int foo(int a);
int bar(int a);
int test(int a);
我的消息处理程序的逻辑完全相同:
void HandleFoo(int a) {
process(a);
int ret = foo(a);
if (ret)
print(a);
}
void HandleBar(int a) {
process(a);
int ret = bar(a);
if (ret)
print(a);
}
void HandleTest(int a) {
process(a);
int ret = test(a);
if (ret)
print(a);
}
所以我想知道是否可以编写一个通用函数:
void Handle(int a, func_pointer fn) {
process(a);
int ret = fn(a);
if (ret)
print(a);
}
The fn
就像一个通用函数指针,可以接受foo
, bar
and test
这可能吗?
顺便说一句,目前我的项目中没有 C++11 和 boost,仅使用 TR1。
您可以使用模板
示例(不完全是您的代码):
int add1(int n) { return n + 1; }
int add2(int n) { return n + 2; }
template<typename Adder>
void AddHandler(int n, Adder adder)
{
int r = adder(n);
std::cout << r << std::endl;
}
int main(void)
{
AddHandler(1, add1);
AddHandler(3, add2);
return 0;
}
输出符合预期:
2
5
你可以在这里看到它的直播http://ideone.com/q3FyI5
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)