【问题标题】:How to Pass a Function to Structure in C++?如何将函数传递给 C++ 中的结构?
【发布时间】:2021-08-12 21:30:12
【问题描述】:

我的结构代码:

struct MouseHandler
{
    void OnHover();
    void* OnLeftClick();
    // void (*OnLeftClick)();
    void OnRightClick();
    void OnDrag();
    void OnDrop();
};

结构体的调用:

MouseHandler ms;

我正在尝试将 SampleScrollDownClickHandler 传递给 ms.OnRightClick(),有可能吗,我该怎么做,我试过这个,但我失败了:

ms.OnRightClick() = SampleScrollDownClickHandler();

我没有使用标准库!

【问题讨论】:

  • OnRightClick() 似乎返回 void 所以,不,你不能像那样为它分配一个处理程序。请出示minimal reproducible example
  • 您似乎想要指向函数的指针,而 OnLeftClick 已被注释掉。
  • void (*OnRightClick)() = nullptr; ms.OnRightClick = &SampleScrollDownClickHandler;
  • 感谢所有答案运行良好,我无法投票

标签: c++ function struct


【解决方案1】:

struct的成员变量定义不正确。

void OnHover(); 声明一个成员函数,而不是一个成员变量。你需要使用void (*onHover)();,它可以指向一个非成员函数。

struct MouseHandler
{
    void (*OnHover)();
    void (*OnLeftClick)();
    void (*OnRightClick)();
    void (*OnDrag)();
    void (*OnDrop)();
};

通过该更改,您可以使用:

MouseHandler me;
me.OnRightClick = SampleScrollDownClickHandler;

只要声明了SampleScrollDownClickHandler 并且是正确的函数类型。

【讨论】:

    【解决方案2】:

    因此,注释掉的行实际上更接近您想要的解决方案。为了传递函数pointer,你不需要调用函数本身,你可以通过使用尾随() 来调用它。因此,以下代码更接近您想要的(仅限于代码的最基本部分):

    struct MouseHandler {
        void (*OnLeftClick)();
        void OnRightClick();
        void OnDrag();
        void OnDrop();
    };
    
    void my_callback() {
    }
    
    int main() {
        MouseHandler m;
    
        m.OnLeftClick = my_callback;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-06
      • 2013-04-12
      • 2015-01-03
      相关资源
      最近更新 更多