C++:动态访问类属性

Rob*_*bin 1 c++ attributes templates dynamic-data

我想知道是否可以动态访问类的属性而不知道在运行时访问的属性的名称.

为了让您更好地理解我的目标,这个PHP代码应该演示我想要做的事情:

<?php
$object = new object();
$property = get_name_out_of_textfile();
echo $object->$property;
?>
Run Code Online (Sandbox Code Playgroud)

我知道不可能做同样的事情,但是假设我在std :: string的cstring中得到了一个属性的名称,并希望访问与该名称匹配的属性.有没有办法做到这一点?

背景是我想从具有大量属性的类动态加载和保存数据.我可以保存我想要的任何格式,但我需要一种方法来重新加载它们,而不是每次都指定确切的属性.

在此先感谢任何帮助,罗宾.

Ton*_*roy 5

基本上,你需要创建一个额外的功能,ala:

std::string get(const std::string& field, const std::string& value_representation)
{
    std::ostringstream oss;
    if (field == "a")
        oss << a;
    else if (field == "b")
        oss << b;
    else
        throw Not_Happy("whada ya want");
    return oss.str();
}
Run Code Online (Sandbox Code Playgroud)

有许多现有的框架可以做到这一点,例如boost序列化库.大多数涉及使用某种标记声明您的类,或者更糟糕的是 - 使用二次元数据.

如果你真的需要一些侵入性较小的东西,那么像Gcc-XML和OpenC++这样的工具可以让你自动生成这些函数(前者可以很容易地与XML库,一个小python或ruby结合使用,以获得简单但低性能的胜利).

为了绝对清楚,C++没有提供任何自动的,符合标准的方法来执行此操作.没有受欢迎的编译器为此提供扩展.在解压缩中,您可以在某处解析自己的调试信息,但绝对不建议这样做.