我的作业要求一个人为任何数据类型编写一个函数。该函数应该打印结构的字节并确定数据结构使用的字节总数以及区分用于成员的字节和字节用于填充。
我和大多数类(class)的第一 react 是使用模板。这允许您编写函数一次并收集传递给函数的对象的运行时类型。使用 memset 和 typeid 的可以很容易地完成所要求的。然而,我们的教授。刚刚看到我们关于模板和该死的模板的讨论。
看到这个后,我陷入了一个循环,我正在寻找一些指导作为解决这个问题的最佳方法。我调查过的一些事情:
- 通过显式转换取消指针(这看起来会变得困惑)
- 仅具有虚函数的基类,所有数据结构都从中继承,这似乎有点奇怪。
- 一个与我们的每个数据结构都有“友元”的基类。
- 为我们的问题集中的每个数据结构重写一个函数(我认为这是最糟糕的解决方案)。
希望我忽略了一个通用的 c++ 工具,有人有什么想法吗?
最佳答案
尽可能地把函数看成愚蠢的,事实上,把它当作它什么都不知道,所有的信息都必须传递给它。
函数的参数:
- 结构地址,作为
uint8_t *
。 (需要打印字节) - 结构大小,以字节为单位。 (需要打印字节并打印 总规模)
- 成员信息 vector :成员长度或成员使用的字节总和。
需要vector来满足打印成员使用的字节数和padding使用的字节数的要求。您可以选择传递成员的总和。
示例:
void Analyze_Structure(uint8_t const * p_structure,
size_t size_of_structure,
size_t size_occupied_by_members);
这个赋值的技巧是弄清楚如何让调用函数确定这些项目。
希望这对您有所帮助。
编辑 1:
struct Apple
{
char a;
int weight;
double protein_per_gram;
};
int main(void)
{
Apple granny_smith;
Analyze_Structure((uint8_t *) &granny_smith,
sizeof(Apple),
sizeof(granny_smith.a)
+ sizeof(granny_smith.weight)
+ sizeof(granny_smith.protein_per_gram);
return 0;
}
关于c++ 函数在不使用模板的情况下采用任何数据类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26122159/