c函数在不使用模板的情况下获取任何数据类型?

我有一个分配要求为任何数据类型编写函数.该函数应该打印结构的字节并识别数据结构使用的字节总数,以区分用于成员的字节和用于填充的字节.

我的立即反应,以及大多数类的反应是使用模板.这允许您编写一次函数并收集传递给函数的对象的运行时类型.使用memset和typeid可以轻松完成所要求的内容.但是,我们的教授.刚刚看到我们关于模板和该死的模板的讨论到了地狱.

看到这个后,我被抛出一个循环,我正在寻找一个小指导作为解决这个问题的最佳方法.我调查过的一些事情:

>使用显式转换的void指针(这看起来好像很乱)
>只有所有数据结构都从中继承的虚函数的基类,看起来有点奇怪.
>对每个数据结构都有“友谊”的基类.
>为我们的问题集中的每个数据结构重写一个函数(我想象的是最糟糕的解决方案).

希望我忽略了一个常见的c工具,有没有人有任何想法?

最佳答案 事实上,将函数视为愚蠢的事实,将其视为不知道任何事情,并且必须将所有信息传递给它.

函数的参数:

>结构地址,作为uint8_t *. (需要打印字节)
>结构大小,以字节为单位. (需要打印字节并打印
总大小)
>成员信息的向量:成员长度或成员使用的字节总和.

需要向量来满足打印成员使用的字节和填充使用的字节的要求.您可以选择传递成员的总和.

例:

  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;
}
点赞