我希望能够内省一个C++类的名称,内容(即成员及其类型)等.我在这里说的是原生C++,而不是托管C++,它有反射.我意识到C++使用RTTI提供一些有限的信息.哪些额外的库(或其他技术)可以提供此信息?
考虑一个简单的结构:
struct abc
{
int a;
char b;
}
Run Code Online (Sandbox Code Playgroud)
我在一个定义为其结构的变量中得到了一些值,现在我想打印下面的内容.
*a = [some value]
b = [some character]*
Run Code Online (Sandbox Code Playgroud)
对于任意结构实现此目的的最佳方法是什么,而不必为我遇到的每个结构编写dump ...(...)函数?
大多数成熟的C++项目似乎都有自己的反射和属性系统,即用于定义可以通过字符串访问的属性并且可以自动序列化.我参与的至少很多C++项目似乎重新发明了轮子.
你知道任何支持反射和属性容器的C++ 开源库,特别是:
是否有更简单的方法来显示控件中的struct
字段及其对应的值RichEdit
?
这就是我现在正在做的事情:
AnsiString s;
s = IntToStr(wfc.fontColor);
RichEdit1->Lines->Append(s);
Run Code Online (Sandbox Code Playgroud)
等等...
有没有比单独呼叫每个人更简单的方法?我想读取一个二进制文件,然后在RichEdit
我正在构建的小实用程序的控件中显示相应的结构,并且没有找到其他方法.我知道如何读取二进制文件并将值读入struct
已经存在的文件中.
假设我有一个包含许多成员的对象:
class Example {
AnotherClass member1;
AnotherClass member2;
YetAnotherClass member3;
...
};
Run Code Online (Sandbox Code Playgroud)
是否有简短的方法来做类似的事情:
foreach(member m: myExample)
m.sharedMethod();
Run Code Online (Sandbox Code Playgroud)
而不是单独访问每一个?
我想我可以将它们放在一个向量中并使用一个shared_ptr
相同的效果,我只是想知道是否说,Boost或其他一些流行的库没有自动执行此操作.
让我们A
:
struct A {
int a;
std::string b;
struct keys {
struct a;
struct b;
};
};
Run Code Online (Sandbox Code Playgroud)
我想fusion::map
从结构中生成一个它包含fusion::pair
s:fusion::pair<A::keys::a, int>
和fusion::pair<A::keys::b, std::string>
.就像是
A a;
fusion::make_map<A>(a)
Run Code Online (Sandbox Code Playgroud)
我试过了 BOOST_FUSION_ADAPT_ASSOC_STRUCT
BOOST_FUSION_ADAPT_ASSOC_STRUCT(
A,
(int, a, A::keys::a)
(std::string, b, A::keys::b)
Run Code Online (Sandbox Code Playgroud)
)
这使A适合用作关联序列,但我还没有找到从中构造地图的方法.特别是,如果我迭代它,我只得到值.如果我可以迭代那些真正有用的键,因为那时我可以压缩值和键来构建一个映射,但我还没有找到一种方法来做到这一点.
这个问题听起来有点不同寻常.我们来看一个POD结构:
struct MyStruct
{
int myInt;
double myDouble;
AnotherPOD* myPointer;
};
Run Code Online (Sandbox Code Playgroud)
编译器知道可用数据成员的列表.您是否知道在编译时(更好)或运行时获取数据成员名称列表(和类型)的方法?
我有大量的POD结构,我想自动创建operator <<.
我知道我可以为头文件创建一个解析器,创建一些文件并编译它们.但是,我确信编译器已经有了这些信息,我想利用它.
有任何想法吗?
谢谢
c++ ×7
reflection ×2
attributes ×1
boost ×1
boost-fusion ×1
c++builder-5 ×1
richedit ×1
sfinae ×1
struct ×1
structure ×1
templates ×1
visual-c++ ×1