有没有一种方法可以使用=类型分配来代替此语法:void triggerAttack() { adsr.triggerAttack(); }
我希望做这样的事情:void triggerAttack() = adsr.triggerAttack
std::function<void()> triggerAttack = adsr.triggerAttack
void(*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/