在两个函数之间选择的函子

Functor for Choosing Between Two Functions

本文关键字:选择 之间 函数 两个      更新时间:2023-10-16

搜索C 函数语法的搜索带来了很多不同的结果,我认为我没有看到其中任何一个的需求。有些使用模板,有些使用单个类,另一些则使用多个类,而另一些则使用结构。我永远不确定我想做什么需要什么特定元素。所以现在,我想做的:

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

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

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

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

只需使用 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更灵活。