gpt4 book ai didi

c++ - 无论参数签名如何,我都可以制作一个函数表吗?

转载 作者:太空狗 更新时间:2023-10-29 21:42:21 25 4
gpt4 key购买 nike

我想从一个表中调用所有类型的函数。(考虑返回类型都是无效的)

为了说明我在说什么,这里有一些代码显然不起作用。

#include <iostream>
#include <map>
#include <functional>

void foo(int x){std::cout<<x;}
void bar(){std::cout<<"bar";}


std::map<std::string, std::function<void()>> map =
{
{"foo", foo},
{"bar", bar}
};

int main()
{
map["foo"](2);
map["bar"]();
}

我不反对 C 风格的解决方案。

最佳答案

您可以将您的指针声明为旧式 C 函数指针可变参数函数,例如:

 foo(...);
bar(...);

std::map<void(*)(...)> map =
{
{"foo", foo},
{"bar", bar}
};

但是 foo 和 bar 必须遵循 va_args、va_start 的可变参数调用约定 等等,您只能从列表中拉出 C POD。不知道是否值得麻烦。调用方法仍然必须以某种方式知道要传递的参数数量。

看起来您可能会重新考虑您的设计。

例如,如果这应该是一种 CLI 的命令表,那么传递一个 std::vector<std::string> 可能会更好。到每个潜在的命令,并使其确定 vector 是否具有适合其目的的正确 size()。

关于c++ - 无论参数签名如何,我都可以制作一个函数表吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26512904/

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