C ++将类的重载operator()传递为函数指针

卡斯珀·汉森

因此,我坚持让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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章