2012-10-21 56 views
2

谷歌搜索C++函子语法带来了很多不同的结果,我不认为我看到其中的任何需求。有些使用模板,有些使用单个类,有些则使用多个模板,还有一些使用结构。我不确定我想要做什么的具体元素。所以现在,我想要做什么:函子之间选择两个函数

我有两个功能。他们都采取完全相同的参数,但不同的命名,将返回不同的结果,但返回类型也是相同的,例如,

unsigned foo1(char *start, char *end);
unsigned foo2(char *start, char *end);

我只是想选择哪个函数根据布尔变量的值调用。我可以只写一个谓词来在两者之间进行选择,但这似乎并不是一个优雅的解决方案。如果这是C,我会使用一个简单的函数指针,但我被告知它们在C++中不能很好地工作。

编辑:由于限制超出我的控制,在这种情况下,我不能使用C++ 11。

回答

4

只需使用std::function

std::function<unsigned int(char*, char*)> func = condition ? foo1 : foo2; 
//   ^^^^^^^^^^^^^^^^^^^^^^^^^^ function signature 

// ... 

unsigned int result = func(start, end); 

此外,函数指针用C正常工作++:

auto func = condition ? foo1 : foo2; 

unsigned int result = func(start, end); 

std::function更加灵活。

+0

啊,std :: function看起来不错。 “自动”是C++ 11,对吗? – Eric

+0

@Eric是的,这是正确的。 –

+0

我很感谢你的回答。我应该提到,首先我不能使用C++ 11来解决这个问题。对于那些没有我的约束的人,​​你的回答将会非常有用,所以我感谢你。 – Eric