有没有一种方法可以使用=类型分配来代替此语法:
void triggerAttack() { adsr.triggerAttack(); }
我希望做这样的事情:
void triggerAttack() = adsr.triggerAttackstd::function<void()> triggerAttack = adsr.triggerAttackvoid(*triggerAttack)() = adsr.triggerAttack
但是没有编译!

示例代码:

class LinearADSR
{
public:
    void triggerAttack() { }
};

class JerobeamBlubb : public gen
{
public:
    void triggerAttack() { adsr.triggerAttack(); }

protected:
    LinearADSR adsr;
};

最佳答案

通常,成员函数指针与通常的指针不同,因为必须将其与类的实例一起使用。

因此,将您的代码更改为此:

class LinearADSR
{
public:
    void triggerAttack() { }
};

class JerobeamBlubb
{
public:
    void (LinearADSR::*triggerAttack)();
protected:
    LinearADSR adsr;
};

int main()
{
   JerobeamBlubb a;
   a.triggerAttack = &LinearADSR::triggerAttack;
}

关于失败的尝试:
  • void triggerAttack() = adsr.triggerAttack; is invalid syntax
  • std::function<void()> triggerAttack = adsr.triggerAttack失败,因为triggerAttack是成员函数,而不是通常的函数。正如我之前解释的那样,您需要一个其类的实例。
  • void(*triggerAttack)() = adsr.triggerAttack失败,原因与上述相同。
  • 关于c++ - C++将成员对象函数分配给类成员函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46250635/

    10-10 10:04