gpt4 book ai didi

c++ - 重新解释成员函数指针 a 'good idea' 吗?

转载 作者:太空狗 更新时间:2023-10-29 23:29:28 26 4
gpt4 key购买 nike

我有一个工作线程,它包含一个“线程操作”列表,并按时间处理它们。

template <class T> class ThreadAction
{
public:

typedef void (T::*action)();

ThreadAction(T* t, action f) :
func(f),obj(t) {}
void operator()() { (obj->*func)(); }

void (T::*func)();
T* obj;

};

通常这样称呼

myActionThread->addAction(
new ThreadAction<TheirClass>(this, &TheirClass::enable)
);

之前一切正常
 void TheirClass::enable()

改为

 bool TheirClass::enable()

遗憾的是,我们不能再将其改回原样,因为其他内容需要新格式(并且重载不能仅因返回类型而不同)。

我试过了

myActionThread->addAction( 
new ThreadAction<TheirClass>(this,
reinterpret_cast<void(TheirClass::*)>(&TheirClass::enable)
)
);

这似乎工作得很好,但我不确定像这样重新解释函数指针是否是“已定义”行为,有人可以建议一下吗?

最佳答案

这绝对是支持的行为,并且可能导致您的程序崩溃。

基本上,您需要为 TheirClass::enable() 制作一个具有正确返回类型的包装器。一个简单的一行就足够了:

public:
void enableWrapper() { enable(); };

然后调用:

myActionThread->addAction(
new ThreadAction<TheirClass>(this, &TheirClass::enableWrapper)
);

如果您不能直接修改TheirClass,那么创建一个实现包装器的简单子(monad)类或辅助类。

关于c++ - 重新解释成员函数指针 a 'good idea' 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1572909/

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