是否可以动态检查文本字符串是否是 C++ 中给定类的成员?

Posted

技术标签:

【中文标题】是否可以动态检查文本字符串是否是 C++ 中给定类的成员?【英文标题】:Is it possible to dynamically check if a string of text is a member inside of a given class in C++? 【发布时间】:2017-07-07 20:25:26 【问题描述】:

我想知道是否有任何方法可以检查给定类是否包含给定成员,除了给定成员的名称作为 std::string 提供。这是我所处情况的一个例子:

class MyClass 
public:
    int a;
    int b;
    int c;
    void Handle_Class(std::string prop) 
        if (this->prop)  //pseudo code of what I want to accomplish
            //do stuff
        ;
    ;
 my_class;

int main() 
    my_class.Handle_Class("a");
;

我知道 Handle_Class 不是这样的函数的最佳名称,但它基本上应该检查该类是否有一个名为 prop 的成员。 我不知道如何实际做到这一点。本质上,我试图动态检查一个类是否具有给定的成员。 我在 Lua 方面有很多经验,你可以在 Lua 中轻松完成(虽然 Lua 不是面向对象的,但你可以使用表来完成)

local my_table = a = 123; b = 456; c = 789;
local function Handle_Table(prop)
    if my_table[prop] then
        print("property "..prop.." exists inside my_table!");
    end
end

如果有任何帮助,我将不胜感激。 谢谢

【问题讨论】:

你在验证一些变量吗? 如果我不太理解你的方法,这可以用地图来完成,你可以设置几个值,例如像 这样的地图,这样你就可以比较字符串并获取 int。 见Why does C++ not have reflection? 由于 c++ 是一个强类型的类并且是经过编译的,它实际上不会让你这样做。所有变量名称都被编译到不保留其名称的内存位置。因此,代码实际上并不知道变量的名称,只知道有一个数字或字符串或其他什么。 Lua 是一种无需编译的脚本语言。这意味着环境知道变量和属性的名称。非常类似于 javascript 的方式。 这也与面向对象无关。此外,如果您要将变量存储到 Genaro Morales 建议的地图中,您可以这样做。你会发现使用 if(map.find(prop) != map.end()) 【参考方案1】:

还有一种方法可以在编译时使用模板执行此操作,您不能在运行时指定动态字符串进行检查,但请考虑:

How to detect whether there is a specific member variable in class?

【讨论】:

以上是关于是否可以动态检查文本字符串是否是 C++ 中给定类的成员?的主要内容,如果未能解决你的问题,请参考以下文章

是否可以检查名称为字符串的函数是否存在?(C++)

如何检查给定的 c++ 字符串或 char* 是不是仅包含数字?

使用 SET(C++) 检查两个给定字符串是不是为字谜时出现运行时错误

是否有可能知道从文件中读取的长文本将在 C 中使用多少个字符?

动态循环遍历Python函数中的函数列表

是否有一个好的 C++ 库来读取、创建和修改 BER 编码文件?