gpt4 book ai didi

C++:动态访问类属性

转载 作者:太空宇宙 更新时间:2023-11-03 10:21:25 26 4
gpt4 key购买 nike

我想知道是否可以在不知道运行时访问的属性名称的情况下动态访问类的属性。

为了让您更好地理解我的目标,这段 php 代码应该演示我想要做什么:

<?php
$object = new object();
$property = get_name_out_of_textfile();
echo $object->$property;
?>

我知道不可能做完全相同的事情,但假设我在 std::string 的 cstring 中得到了一个属性的名称,并且想访问与该名称匹配的属性。有办法吗?

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

在此先感谢您的帮助,罗宾。

最佳答案

基本上,您需要创建一个额外的函数,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();
}

有很多现有框架可以执行此操作,例如 boost 序列化库。大多数涉及使用某种标记或更糟的方式 - 非本地化的辅助元数据来声明您的类。

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

需要明确说明的是,C++ 不提供任何自动化的、符合标准的方法来执行此操作。没有流行的编译器为此提供扩展。无奈之下,您也许可以找到某个地方解析您自己的调试信息,但绝对不推荐这样做。

关于C++:动态访问类属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3699336/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com