gpt4 book ai didi

c++ - 在不提供参数类型的情况下绑定(bind)函数

转载 作者:行者123 更新时间:2023-11-28 07:15:35 25 4
gpt4 key购买 nike

我在 C++ 函数方面遇到了一些(对我来说)困难的问题。我做了一些类(class),比如数字、字符等等。每个类都有一个void add函数,但是Numbers有void add(int v),Characters - void add(char c)等。在主函数中,我有 Numbers 和其他类的实例(numbs、charcts),我想将它们与 std::map 绑定(bind),这样我就可以调用这样的函数:

func_map["numbers"]["add"](12);

这将与:

numbs.add(12);

但如果我可以通过仅将名称作为字符串来调用方法(如上所示),对我来说会更容易。我应该怎么做?

最佳答案

我会警告你不要这样的设计。

但是,好吧,如果您绝对需要它,则必须为您的函数定义一个通用接口(interface)。也就是说,您的函数必须具有相同的原型(prototype)。

例如,您可以定义一些可以从不同数据类型构造的容器类(或使用类似 boost::variant 的类),并且您可以编写“添加”函数以便它们接受此类的对象。我的意思是:

class DataContainer { 
public:
DataContainer(int n) { int_data_ = n; }
DataContainer(char c) { int_data_ = c; }
DataContainer(const string s) { string_data_ = s; }
// let them be public to make code shorter
int int_data_;
string string_data_;
};

typedef void (*OpMethod)(const DataContainer);

void NumberAdd(const DataContainer data) {
// work with data.int_data_
}

map<string, map<string, OpMethod> > funcmap;

...
funcmap["number"]["add"] = NumberAdd;

绑定(bind)类方法会有点困难(您还应该指定一个对象实例)。考虑使用 std::function。

关于c++ - 在不提供参数类型的情况下绑定(bind)函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20275409/

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