如何将指向内部成员的指针传递给外部类?

问题描述 投票:-1回答:1

我正在尝试将指向类(Dialog :: handler)的成员的指针从其方法(在Dialog :: render的范围内)传递给某个外部方法(Button :: OnClick)。

这里是一个小例子:

        class Button
        {
        public:
            void OnClick(void (*handler)())
            {
                handler();
            }
        };

        class Dialog
        {
        public:
            void handler()
            {
                //do stuff
            }
            void render()
            {
                auto button = new Button;
                //Source of problem
                button->OnClick(this->*handler);
            }
        };

但是编译器显示错误:

非标准语法;使用“&”创建指向成员的指针

我也将其他组合都混为一谈,例如:

  • 这个 - >处理程序。
  • &this.handler。
  • 此。*处理程序。

但是显然他们失败了。

c++ class member-function-pointers member-pointers
1个回答
0
投票

您可以使用std::function并传递一个lambda,在其中捕获了您要回调的对象this

#include <functional>
#include <iostream>

class Button {
public:
    void OnClick(std::function<void()> handler) {
        handler();
    }
};

class Dialog {
public:
    void handler() {
        std::cout << "Dialog::handler\n";
    }
    void render() {
        auto button = new Button;
        // a lambda catching "this" Dialog.
        button->OnClick([this] { this->handler(); });
        delete button;                               // you didn't delete your button
    }
};

int main() {
    Dialog d;
    d.render();
}

但是看起来您可能应该继承自具有virtual void handler()的通用基类,因此可以改为传递对象指针/引用。

© www.soinside.com 2019 - 2024. All rights reserved.