【发布时间】:2026-01-27 16:15:01
【问题描述】:
我在 C++ 中遇到了一些困难的(对我而言)问题。
我做了一些类,比如数字、字符等。
每个类都有一个void add 函数,但数字有void add(int v)、字符-void add(char c) 等。
在 main 函数中,我有 Numbers 和其他类的实例(numbs、charcts),我想将它们与 std::map 绑定,所以我将能够调用这样的函数:
func_map["numbers"]["add"](12);
这将与以下内容相同:
numbs.add(12);
但是,如果我可以通过将方法的名称作为字符串(如上图所示)来调用方法,那对我来说会更容易。 我该怎么做?
【问题讨论】:
-
我认为使用不同的语言、JavaScript 或其他东西可能会更快乐。并不是说你不能让它在 C++ 中工作,但你真的在和这门语言作斗争。
-
你确定这样更容易吗?看起来更难打电话和读给我听...
-
@BitFiddlingCodeMonkey 以后打电话更容易。用户可以键入“数字加 2”,我不必用太多编码来解析用户的输入。
-
你真的需要动态类型语言。编译器不可能对
func_map["numbers"]["add"]是一个函数进行类型检查int和func_map["numbers"]["someotherfunction"]是一个函数接受别的东西 -
你需要像
boost::any这样的东西,并让你的所有成员函数都是以vector<any>作为参数的函数,并检查它们在运行时是否有效。
标签: c++ function stl bind stdmap