gpt4 book ai didi

c++ - 如何创建不同原型(prototype)的函数指针数组?

转载 作者:IT老高 更新时间:2023-10-28 12:46:34 25 4
gpt4 key购买 nike

我有几个这样定义的函数:

ParentClass*    fun1();
ParentClass* fun2();
ParentClass* fun3(bool inp=false);
ChildClass* fun4();
ChildClass* fun5(int a=1, int b=3);

我想将它们放入某种数组中,如下所示:

void* (*arr[5])() = {
(void* (*)())fun1,
(void* (*)())fun2,
(void* (*)())fun3,
(void* (*)())fun4,
(void* (*)())fun5
}

现在我想简单地使用这个函数数组

for(int i=0; i<5; i++)
someFunction(arr[i]());

现在我意识到问题是 void* (*arr[5])(),但鉴于我只想使用函数而不提供参数,我想要所有这些是同一个数组的一部分。

不过,这些都是非常 C 风格的方法。有没有更好的方法来使用 C++ 中的模板?

最佳答案

C 风格与否,你所拥有的是直接未定义的行为。使用 lambda:

void (*arr[5])() = {
[] { fun1(); },
[] { fun2(); },
[] { fun3(); },
[] { fun4(); },
[] { fun5(); }
};

这些都可以,因为它们通过函数的正确类型执行调用,并且它们本身可以转换为 void (*)()

转发返回的值非常简单,因为 lambda 为转换提供了上下文。在您的情况下,由于 ChildClass 应该继承自 ParentClass,因此隐式转换就足够了:

ParentClass *(*arr[5])() = {
[]() -> ParentClass * { return fun1(); },
[]() -> ParentClass * { return fun2(); },
[]() -> ParentClass * { return fun3(); },
[]() -> ParentClass * { return fun4(); },
[]() -> ParentClass * { return fun5(); }
};

关于c++ - 如何创建不同原型(prototype)的函数指针数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53628791/

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