gpt4 book ai didi

c++ - 带参数的 Void* 函数

转载 作者:行者123 更新时间:2023-11-30 03:47:41 24 4
gpt4 key购买 nike

对于我尝试编写的应用程序,我需要能够编写 GLEnable(GL_REPEAT)interface (得到这个工作)。用户执行此操作后,系统应使用正确的参数调用该函数。

为此,我使用以下变量来获取正确的函数:

std::map<std::string, void(*)(GLenum)> glEnableDisable;

并通过以下方式在其中存储数据:

glEnableDisable["glEnable"]  = glEnable;
glEnableDisable["glDisable"] = glDisable;

(Note that the above gives a warning "'=' cannot convert from 'void (__stdcall *)(GLenum)' to 'void (__cdecl *)(GLenum)'")

最后,函数调用通过:

((void (*)(GLenum)) Main.glEnableDisable[SplittedUp[0]])(Parameter);

现在,我想知道我做错了什么。我在没有参数的情况下工作正常,但我真的需要参数。

提前致谢

乔伊

最佳答案

改变这个:

std::map<std::string, void(*)(GLenum)> glEnableDisable;

为此:

std::map<std::string, std::function<void(GLenum)>> glEnableDisable;

再也不用担心调用约定了。 std::function 能够存储任何函数或可调用对象,无论其调用约定如何。

不需要转换:

Main.glEnableDisable[SplittedUp[0]])(Parameter);

关于c++ - 带参数的 Void* 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33574269/

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