gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 15:57:04 24 4
gpt4 key购买 nike

因此,我坚持让 C++ 类模仿常规函数,从而让自己陷入了摇摇欲坠的境地。当然,该类重载了函数运算符,使其成为仿函数。这一切都很好,直到你想传递这个仿函数的函数指针。

当然,我想让编译器知道我们知道我们在做什么(笑),方法是对这个指针进行重新解释转换。但是,我如何获取这个特定成员函数的地址,因为它是一个重载运算符。如何获得它的地址?

更新:您要求举个例子。这是一个最小的。

所以我有一个界面,我无法更改。看起来像这样;

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>( ? ? ? ));以确保编译器不会向我吐槽。

最佳答案

假设您必须使用函数指针,并且您的仿函数没有状态,您可以使用 lambda 作为胶水:

void takesFunctionPointer(void (*)());

struct MyFunctor {
void operator()();
};

// ...

takesFunctionPointer([] { return MyFunctor{}(); });

关于C++ 将类的重载 operator() 作为函数指针传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54651448/

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