因此,我坚持让C ++类模仿常规函数,从而陷入困境。当然,该类会重载函数运算符,使其成为函子。一切正常,直到您要传递此函子的函数指针为止。
自然,我想通过对该指针进行reinterpret_cast来让编译器知道我们在做什么(笑)。但是,由于它是一个重载运算符,因此我如何获取该特定成员函数的地址。如何获得该地址?
更新:您要求一个示例。这是最小的一个。
所以我有一个无法更改的界面。看起来像这样;
typedef void (*some_callback_t)(SomeType);'
void someFunc(some_callback_t);
现在,这很简单。API正在设置一些回调函数指针。因此,想法是operator()
像往常一样通过重载,将回调实现为函子类。
class Bah {
void operator()(SomeType);
};
问题来了;看到我无法更改所用的API(期望某个签名的函数指针的函数),那么我如何才能获取成员函数的地址并将其传递呢?
我怀疑它会发生类似的事情;someFunc(reinterpet_cast<some_callback_t>( ? ? ? ));
确保编译器不会对我me之以鼻。
假设您必须使用函数指针,并且函子没有状态,则可以使用lambda作为胶水:
void takesFunctionPointer(void (*)());
struct MyFunctor {
void operator()();
};
// ...
takesFunctionPointer([] { return MyFunctor{}(); });
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句