在运行时通过其名称访问类成员变量

时间:2010-11-22 06:37:05

标签: c++ reflection

更多不可能但又真实的问题:

是否可以访问类的成员变量,其中变量的名称存储在字符串中?

class Test
{
public:
int test = 0;
}
string name = "test"; // let's assume we know test is an int.

是否有机会使用字符串获取测试值?

不允许作弊:

enum vartype {
INT,
..
}

不强制班级在std::map<string, std::pair<vartype, void*> >注册所有变量。

欢迎所有其他技巧。

谢谢!

3 个答案:

答案 0 :(得分:4)

没有

为此,您需要在成员变量和您打算访问它们的字符串名称之间提供一些映射。

答案 1 :(得分:2)

在非常难看的kluges领域,您可以使用调试信息构建程序,并使用它来以与调试器相同的方式查找变量的位置。但除此之外,你运气不好。 C ++没有做反思。

答案 2 :(得分:0)

关于为什么它不能在C ++和替代方案中使用: http://en.allexperts.com/q/C-1040/eval-function-javascript-C.htm

虽然可以在MATLAB中使用...... 作为一个非常简单的例子,如果你要进行矩阵更新,那就像:

M1=1;
M2=2;
M3=3;

你希望变量名可以改变,以便你可以使用for循环,然后它也可以这样做:

for i=1:3
eval(['M' num2str(i) '=' num2str(i)]);
end

我曾经在Actionscript中这样做。真的很高兴发现它也可以在Matlab中使用