如何动态地将key:value属性添加到c ++类,然后使其可以作为class.property访问

时间:2013-08-11 01:32:17

标签: class dynamic properties key-value

在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 ++可以做到这一点,我不知道从哪里开始。

2 个答案:

答案 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)返回该键的字典中的值。