如何创建指向函数指针的指针?

拉斐尔·维索托(Rafael Vissotto)-Inel

我正在尝试创建一个具有2个功能的结构,如果以后需要的话可以将其重写。这些函数是:onClicked()和onClickedRight()。该结构的代码:

typedef struct {
    QString text;
    QString infoText;
    QUrl iconSrc;
    QColor iconColor;
    void (*onClicked)() = nullptr;
    void (*(*onClickedRight))() = &onClicked; // by default, execute the same function from onClicked()
} ConfigButton;

我如何执行这些功能:

ConfigButton b;
...
// test if click funtion has been defined, to execute it
if (b.onClicked)
    b.onClicked(); // this one work just fine

...

if (*(b.onClickedRight))
    (*(b.onClickedRight))(); // this one crashed

可能吗 我想念什么吗?

x

调整了答案,因为OP已从标签列表中删除了

该代码按原样工作因此,您在做其他错误的事情。

但是,以这种方式使用指向函数的指针的指针可能没有所需的语义。如果将结构复制到另一个结构,则onClickedRight副本中成员不会指向onClicked其自己实例中指针。相反,它指向onClicked原始实例指针。

a.onClickedRight = &a.onClicked;
b = a;
assert(b.onClickedRight == &a.onClicked); // Is this intentional?

这意味着您必须格外小心如何使用包含指向其自身成员的指针(以及实际上指向任何内容的指针)的结构。您可能需要某种深度复制方法(因此,根据TRoT,您需要一个复制构造函数,一个赋值运算符和一个析构函数)。

无论如何,C ++代码并不是真正的习惯用法。对于我自己,我可能会利用虚拟方法。虚方法的语法可以轻松适应这种用例。

struct ConfigButton {
    QString text;
    QString infoText;
    QUrl iconSrc;
    QColor iconColor;
    virtual void onClicked() const = 0;
    virtual void onClickedRight () const { onClicked(); }
};

struct Foo : ConfigButton {
    void onClicked () const {
        //...
    }
};

如果您遵循此方法,这也将起作用。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何创建指向函数C ++的指针的线程

来自分类Dev

C ++如何创建指向函数的常量指针?

来自分类Dev

创建指向类的指针的函数

来自分类Dev

如何创建指向UITableView的指针?

来自分类Dev

如何在C#中创建“指向函数指针的typedef”?

来自分类Dev

如何创建将保存指向函数的指针的队列?

来自分类Dev

指向函数指针数组的指针

来自分类Dev

dladdr:指向函数的指针与指向对象的指针

来自分类Dev

如何创建指向2D指针数组的指针-C

来自分类Dev

如何创建指向结构的指针数组?

来自分类Dev

如何区分指向重载函数的指针?

来自分类Dev

如何正确传递指向函数的指针?

来自分类Dev

如何使函数接受指向不同类的指针?

来自分类Dev

指向成员函数的指针如何工作?

来自分类Dev

C ++如何使函数指针指向类方法

来自分类Dev

如何从函数返回指向数组的指针?

来自分类Dev

指向void函数的指针

来自分类Dev

指向成员函数的指针

来自分类Dev

发送指向函数的指针

来自分类Dev

指向成员函数的指针

来自分类Dev

[[nodiscard]]指向函数指针

来自分类Dev

指向函数转换的指针

来自分类Dev

如何打印指向指针的指针

来自分类Dev

如何使用指向指针的指针

来自分类Dev

如何创建noexcept函数指针?

来自分类Dev

指向函数的指针,返回函数指针

来自分类Dev

指向指针的c ++指针和接收指向指针的调用函数

来自分类Dev

指向成员函数的函数指针

来自分类Dev

指向成员函数的函数指针