C++怎么样把struct或class里的所有变量名存储到字符串里 50C

要做一个函数,把传来的结构体的变量名及变量值全部打印出来,共有几百个结构体,
函数调用时,对方只传过来一个结构体指针,和这个结构体对应的宏声明。
如果根据各个结构体挨个变量打印,太麻烦,有什么高效的方法?

10个回答

c++ 没有这种功能,
要实现这种功能 类和结构体的命名要用特殊的宏处理,普通定义的class struct不行
并且只能在预编译阶段做处理实现,

  1. 首先,这里是打印一个的简单宏定义如下:
#include <iostream>
#define VNAME(name) (#name)

int main()
{
    int tmp = 100;
    std::cout << VNAME(tmp) << ": " << tmp << std::endl;
    return 0;
}
  1. 我们要看struct是否有能够支持通过首地址偏移访问其内部成员的技术存在
    首先,深入理解struct,见博文:深入理解struct,以及博文:成员偏移量获取结构首地址,struct是不允许指针偏移访问的。

  2. 这个问题的核心应该是struct遍历的问题,见问答帖,大家认为这个事情不适合C++做,要不就让设计struct的人自己在struct内部设计一个输出sturct信息的函数。

  3. 思想。struct或class都是面向对象,其思想就是封装,封装意味着活是自己干,而不是等着另一个人干。

结论:

个人认为,只有通过指针来遍历struct成员从而打印变量和值,C++是办不到的。

这个只能一一对应了,不然谁知道都什么变量名哪??推荐使用Switch来做。。。

可以用工厂模式,根据结构体的宏声明生成对应的输出函数

你用stl容器吧,没收到一次数据,保存一次,比如向量

qq_37535029
qq_37535029 回复学习与思考_昱: 嗯嗯
3 年多之前 回复
qq_37535029
qq_37535029 嗯嗯
3 年多之前 回复
a29562268
坤昱 回复学习与思考_昱: 容器里的类型设置为结构体指针类型
接近 4 年之前 回复
sinat_33724606
cute_duck 只能得到指针和宏定义,接收的都不是数据啊,因为struct并不允许通过首地址的偏移来获取成员变量的信息。stl容器的使用是有条件的。
接近 4 年之前 回复

<<要做一个函数,把传来的结构体的变量名及变量值全部打印出来,共有几百个结构体,
<<函数调用时,对方只传过来一个结构体指针,和这个结构体对应的宏声明。
<<如果根据各个结构体挨个变量打印,太麻烦,有什么高效的方法?
1 你已经知道了按照类型打印,特别麻烦。
2 那么还有一种方法,可能比这个更麻烦,就是给每个结构体的第一个成员变量是一个类型。
3 生成一个vector string 是成员变量的名称,int是变量的长度。再生成一个 map string>
4 map 中存的是 类型,对应的结构体的属性(名称,长度,位置都是按照从0到大顺序的)
5 解析结构体生成代码(生成 map )
6 当接收到指针后,查看对应的type ,从map中查找对应type对应的vector,按照偏移获取变量的值。

这个方法是做通用工具的一个方式,就是要进行语法分析和词法分析c++ ,生成代码,再将生成代码和你自己的代码进行编译。
缺点是太复杂;优点是很有挑战性,而且的确非常通用。

oqqsoap1234567
alexsendar 你能不能写个最简单的例子,我参考下
接近 4 年之前 回复

你能不能写个最简单的例子,我参考下

你可以在编译器预处理前加上自己的预处理吧,根据struc或class 关键字,利用正则表达式,区分函数式和变量式。
,不过这和c++语言本身没关系啊。

#var 这样可以试一下

要是能转成python ,应该可以实现这样的功能

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐