- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我想知道是否可以在不知道运行时访问的属性名称的情况下动态访问类的属性。
为了让您更好地理解我的目标,这段 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/
你能比较一下属性吗 我想禁用文本框“txtName”。有两种方式 使用javascript,txtName.disabled = true 使用 ASP.NET, 哪种方法更好,为什么? 最佳答案 我
Count 属性 返回一个集合或 Dictionary 对象包含的项目数。只读。 object.Count object 可以是“应用于”列表中列出的任何集合或对
CompareMode 属性 设置并返回在 Dictionary 对象中比较字符串关键字的比较模式。 object.CompareMode[ = compare] 参数
Column 属性 只读属性,返回 TextStream 文件中当前字符位置的列号。 object.Column object 通常是 TextStream 对象的名称。
AvailableSpace 属性 返回指定的驱动器或网络共享对于用户的可用空间大小。 object.AvailableSpace object 应为 Drive 
Attributes 属性 设置或返回文件或文件夹的属性。可读写或只读(与属性有关)。 object.Attributes [= newattributes] 参数 object
AtEndOfStream 属性 如果文件指针位于 TextStream 文件末,则返回 True;否则如果不为只读则返回 False。 object.A
AtEndOfLine 属性 TextStream 文件中,如果文件指针指向行末标记,就返回 True;否则如果不是只读则返回 False。 object.AtEn
RootFolder 属性 返回一个 Folder 对象,表示指定驱动器的根文件夹。只读。 object.RootFolder object 应为 Dr
Path 属性 返回指定文件、文件夹或驱动器的路径。 object.Path object 应为 File、Folder 或 Drive 对象的名称。 说明 对于驱动器,路径不包含根目录。
ParentFolder 属性 返回指定文件或文件夹的父文件夹。只读。 object.ParentFolder object 应为 File 或 Folder 对象的名称。 说明 以下代码
Name 属性 设置或返回指定的文件或文件夹的名称。可读写。 object.Name [= newname] 参数 object 必选项。应为 File 或&
Line 属性 只读属性,返回 TextStream 文件中的当前行号。 object.Line object 通常是 TextStream 对象的名称。 说明 文件刚
Key 属性 在 Dictionary 对象中设置 key。 object.Key(key) = newkey 参数 object 必选项。通常是 Dictionary 
Item 属性 设置或返回 Dictionary 对象中指定的 key 对应的 item,或返回集合中基于指定的 key 的&
IsRootFolder 属性 如果指定的文件夹是根文件夹,返回 True;否则返回 False。 object.IsRootFolder object 应为&n
IsReady 属性 如果指定的驱动器就绪,返回 True;否则返回 False。 object.IsReady object 应为 Drive&nbs
FreeSpace 属性 返回指定的驱动器或网络共享对于用户的可用空间大小。只读。 object.FreeSpace object 应为 Drive 对象的名称。
FileSystem 属性 返回指定的驱动器使用的文件系统的类型。 object.FileSystem object 应为 Drive 对象的名称。 说明 可
Files 属性 返回由指定文件夹中所有 File 对象(包括隐藏文件和系统文件)组成的 Files 集合。 object.Files object&n
我是一名优秀的程序员,十分优秀!