用于在两个函数之间进行选择的函数

时间:2012-10-21 00:46:44

标签: c++ function-pointers functor

谷歌搜索的C ++仿函数语法带来了很多不同的结果,我认为我没有看到任何一个需要什么。有些使用模板,有些使用单个类,有些使用多个,还有一些使用结构。我不知道我需要做什么具体的元素。那么现在,我想做什么:

我有两个功能。它们都采用完全相同的参数,但命名方式不同并返回不同的结果,尽管返回类型也相同,例如,

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

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

编辑:由于我无法控制的限制,在这种情况下,我无法使用C ++ 11。

1 个答案:

答案 0 :(得分: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更灵活。