1

在 Python 中,我有一个标志类,我发现它非常有用。我是 C++ 的新手,似乎无法在 C++ 中复制这个 python 功能。与其提出不起作用的 c++ 代码,不如说这是我想要复制的内容,我需要一些关于去哪里、模板、虚拟或 ?? 的建议

要求是能够动态地改变类的成员,在 python 中,它正在修改类的dict元素,它是实现这一点的自身。

在蟒蛇中:

导入系统参数 = []

...加载 args[] 与键:值循环通过 sys.argv[] ...等等等等

班级标志:

def __ init __(self, **args):

自己。__ 字典 __.update(args)

现在我们启用 flag.dynamicproperty

标志 = 标志(**dict(args))

使用示例: $ python script.py somedesc1 someval1 somedesc2 someval2

这样做是让我能够从命令行传递参数,如上所述,并即时分配任意数量的参数,然后通过返回 somval1 的 flag.property(例如 flag.somedesc1)调用进行访问. 考虑这一点的另一种方法是动态地将 key:value 属性添加到 C++ 类。

python代码中的使用示例:

如果 flag.somedesc1 != '10': 打印 someval1

我似乎无法做出类似的 C++ 工作。我研究了多态性,但是这些必须动态分配,然后可以作为类的属性访问。

想法???当然 c++ 可以做到这一点,我只是不知道从哪里开始。

4

2 回答 2

1

好的,这是我制定的解决方案;尚未对其进行测试,但使用此格式应该足够接近以满足我的需求

flag.find(文件名)

枚举{文件名,工人,运行时};

类标志{

vector<string> helplist;

public: int add(int argc, char *argv[], string flag, string value, string description) {

    string flagvalue;
    flagvalue = value;
    helplist.push_back(description);
    for (int i; i < argv.length(); i++) {
        if (argv[i]==flag) {
            flagvalue = argv[i+1];
        }
    }
}
void showhelp() {
    for (int i; i < helplist.length(); i++) {
        cout << helplist[i] << endl;
    }
}

};

于 2013-08-12T06:45:34.460 回答
0

不,你不能在 C++ 中做到这一点。在 C++ 中,类的成员是在编译时 100% 定义的。您不能在运行时添加任何内容。在 C++ 中执行此操作的方法是拥有一个保存键/值对的成员变量,map<string,string>然后有一个函数string getVariable(string)返回字典中该键的值。

于 2013-08-11T01:59:33.413 回答