【问题标题】:Functors - how can I use them with typedef?函子 - 我如何将它们与 typedef 一起使用?
【发布时间】:2012-07-13 07:05:07
【问题描述】:

这是一个函子:

class add_x {

 int x;

public:
  add_x(int x) : x(x) {}
  int operator()(int y) { return x + y; }

};

从 main 我可以做到这一点:

add_x add10(10); // create my functor 
int i = add10(20); // add 20 and return it 

如何将函子与typedef 结合起来?

例如,我遇到了这个:

typedef int (*myfuncType)(float f, char c1,char c2);
myfuncType pt2Function = NULL; 

但我在这里究竟定义了什么?运营商()?

【问题讨论】:

    标签: c++ function functor


    【解决方案1】:

    函数指针——正如它的名字所说——只是一个指向函数的指针。不能使用函数指针来指向函子,函子本质上是一个带有重载 () 运算符的类。

    你可能对 C++11 中的 std::function 感兴趣:

    #include <functional>
    
    (...)
    std::function<int(int)> fn = add_x(10);
    int i = fn(20);
    


    编辑:好的,我明白了,你在问什么。

    也许一些代码会让事情变得清晰。

    int fn(float a, char b, char c) { ... }
    
    (...)
    
    typedef int (*myFuncType)(float f, char c1, char c2);
    
    myFuncType ptrToFun = &fn;
    
    (*fn)(1.0f, 'a', 'z');
    

    这个 typedef 创建一个“指向函数”的类型。如果您声明这种类型的变量,那么您将能够为其分配一个指向函数的指针(使用常规 & 运算符提取),并且 - 例如 - 传递给另一个函数或只是存储(或调用此函数)。

    std::function 更加灵活,因为您可以在其中存储指向函数、仿函数甚至 lambda 的指针并正常调用它们。

    【讨论】:

    • 哦,现在我明白了:p
    • 我猜,ron 将仿函数与指向函数类型定义的指针混合在一起。不过,这个问题非常不清楚。
    • 我很确定这是关于将函子分配给函数指针,第一部分回答得很好。
    【解决方案2】:

    我不明白你的第一个问题 (How can I combine the functor with typedef ?),所以我无法回答 - typedef 可以像处理任何其他课程一样工作。

    关于你的第二个问题:行

    typedef int (*myfuncType)(float f, char c1,char c2);
    

    int (*)(float, char, char) 类型命名(myfunctType)(阅读:“一个函数,它接受一个float 和两个char 值,然后返回一个int”)。

    所以

    myfuncType pt2Function = NULL;
    

    定义一个可以指向上述函数的变量,但现在将指针设置为NULL。

    【讨论】:

      【解决方案3】:

      这里,myfuncType 是一种描述函数指针的类型,具有三个浮点参数并返回一个 int。仿函数只是一个带有 operator() 重载的类。所以 typedef 和其他类一样使用。

      typedef add_x add 可以工作。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-11-20
        • 1970-01-01
        • 2016-03-14
        • 2013-02-22
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多