【问题标题】:Functor for Choosing Between Two Functions用于在两个函数之间进行选择的函子
【发布时间】:2012-10-11 05:34:30
【问题描述】:

谷歌搜索 C++ 函子语法会带来很多不同的结果,我认为我看不出其中任何一个需要什么。有些使用模板,有些使用单个类,有些使用多个,还有一些使用结构。我永远不确定我想做的事情需要哪些特定元素。所以现在,我想做的是:

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

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

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

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

【问题讨论】:

    标签: c++ function-pointers functor


    【解决方案1】:

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

    【讨论】:

    • 非常感谢您的回答。我应该首先提到我不能使用 C++11 来解决这个特定问题。你的回答对那些不受我约束的人会很有用,所以我谢谢你。
    • @Eric 我只使用了auto 作为缩写。如果你没有auto,你可以做unsigned int(*func)(char*, char*) = condition ? foo1 : foo2;
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-01-03
    • 1970-01-01
    • 2018-05-29
    • 2013-02-23
    • 1970-01-01
    • 2023-03-05
    • 1970-01-01
    相关资源
    最近更新 更多