在Python中,我有一个我发现非常有用的标志类。我是新手到c ++,似乎无法在c ++中复制这个python功能。而不是提出不起作用的c ++代码,这是我想要复制的内容,我需要一些关于去哪里,模板,虚拟或??的建议。
要求是能够动态地改变类的成员,在python中修改类的 dict 元素,它启用了这个的
在python中:
导入系统 args = []
...使用键加载args []:循环通过sys.argv []的值......等等等等等等等等
班级标志:
def __ init __(self,** args):
自我。 __ dict __。update(args)
现在我们启用flag.dynamicproperty
flag = Flag(** dict(args))
使用示例: $ python script.py somedesc1 someval1 somedesc2 someval2
这样做使我能够从命令行传递参数,并在运行中分配任意数量,然后通过flag.property访问(例如flag.somedesc1)调用返回somval1。另一种考虑这个问题的方法是动态地将一个键:value属性添加到C ++类中。
在python代码中使用的一个例子:
如果flag.somedesc1!=' 10':打印someval1
我似乎无法做出类似的c ++工作。我已经研究过多态,但这些必须动态分配,然后作为类的属性进行访问。
思想???当然c ++可以做到这一点,我不知道从哪里开始。
答案 0 :(得分:1)
好的,这是我制定的解决方案;还没有测试过,但应该使用这种格式足够接近我的需要
<强> flag.find(文件名)强>
enum {filename,workers,runtime};
class flag {
vector<string> helplist;
公共: 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;
}
}
};
答案 1 :(得分:0)
不,你不能在C ++中这样做。在C ++中,类的成员在编译时被定义为100%。您无法在运行时添加任何内容。在C ++中执行此操作的方法是使一个成员变量map<string,string>
保存键/值对,然后使用函数string getVariable(string)
返回该键的字典中的值。