执行任意函数指针



我对创建不接受参数也不返回任何内容的函数数组感兴趣。

有没有一种方法可以创建一个通用函数指针并执行它?

示例:

ptr ptrArray[1];
PtrArray[0] = &myfunc;

更一般地说,如果myfunc是一个特定对象中的方法,这会起作用吗?由于函数在代码中的多个对象之间是共享的,所以我的部分假设不是这样。

例如,您有一个对象列表,所有对象都带有更新方法,您希望每个对象都执行。

std::function似乎还有一段路要走,因为它支持种类最多的函数对象,包括lambdas、由bind等创建的函数对象。

#include <functional>
#include <iostream>
#include <array>
struct S
{
void doStuff() {std::cout << "DoStuffMember " << this << "n";}
void doStuff() const {std::cout << "DoStuffMemberConst " << this << "n";}
};
void doStuff() {std::cout << "DoStuffFreen";}
int main()
{
S s;
std::string_view sv{"local varn"};
std::array<std::function<void()>, 8> fkns;
fkns[0] = [&s]{ s.doStuff();};
fkns[1] = [&sr=std::as_const(s)]{sr.doStuff();};
fkns[2] = std::bind<void (S::*)()>(&S::doStuff, s);
fkns[3] = std::bind<void (S::*)()>(&S::doStuff, std::ref(s));
fkns[4] = std::bind<void (S::*)() const>(&S::doStuff, std::cref(s));
fkns[5] = [sv]{std::cout << "lambda capturing " << sv;};
fkns[6] = []{std::cout << "lambdan";};
fkns[7] = doStuff;
for (auto&& f: fkns) {
f();
}
return 0;
}

演示

最新更新