gpt4 book ai didi

c++ - 从 C++ 中的另一个对象执行方法

转载 作者:行者123 更新时间:2023-11-27 22:46:30 24 4
gpt4 key购买 nike

首先请允许我介绍一下我的类(class)结构。我正在为 ARM 设备 (STM32) 设计一个小库,我想实现几个定义系统上可用的不同外设的对象。

class xGPIO : public Peripheral 
{
public:
xGPIO();
xGPIO(GPIO_TypeDef * GPIOx1, uint16_t Pinx1);
virtual ~xGPIO();

void on(void);
void off(void);
private:
void xInitGPIO(void);

};

我的想法是实现一个名为 callback 的内部公共(public)函数,它设置下一个要在我的计时器对象上调用的函数。但是这个函数肯定是另一个类中定义的方法,我希望它从 xTimer 中执行。这里的行为,应该是每当 Timer 结束倒计时时,它应该调用程序员存储在 callBack 方法中的函数。

class xTimer : public Peripheral 
{
public:
xTimer(TIM_TypeDef * tim);
virtual ~xTimer();
/* void callBack(void (*f)()); */

private:
void xInitTimer(void);
TIM_HandleTypeDef htim;
};

void xTimer::callBack(void (*f)())
{
f();
}

main.cpp下的代码如下:

int main(void)
{
mySYS->initialize(false);

xGPIO myGreenLed (GPIOB, GPIO_PIN_0);

/* Declare Timers. */
xTimer myTimer(TIM2);
// myTimer.callBack(myGreenLed.on);
}

关于如何解决这个问题的任何线索?有没有一种简单的方法可以在 C++ 程序上遵守该设计?

最佳答案

您正在使用 C 模式。 C++ 拥有更强大的 std::function。您的 xTimer::callBack 应定义为

void xTimer::callBack(std::function<void(void)> f) { f(); }

所以它可以被称为

myTimer.callBack([&](){myGreenLed.on()}); //using lambda

myTimer.callBack(std::bind(&xGPIO::on, &myGreenLed));

关于c++ - 从 C++ 中的另一个对象执行方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42225069/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com