【问题标题】:Generating a set of methods for checking messages' content生成一组检查消息内容的方法
【发布时间】:2010-09-01 13:28:35
【问题描述】:

在我的单元测试框架中,对于一些消息(它们只是 POD 结构),我需要一种方法来比较两个这样的消息(结构)以确保所有字段的相等性。例如,如果我有一条消息:

struct SExampleMessage
{
    int someField;
    int someField2;
    char someField3[10];
};

我有一个方法,它接受两个指向 SExampleMessage 的指针,如果两个结构中的所有字段都相等,则返回 true:

bool compareExampleMessage(SExampleMessage* expectedMsg,
                           SExampleMessage* receivedMsg);

(指针当然可以是 void* 并转换为正确的类型)

我的问题是 - 有什么方法可以避免编写此样板代码,同时保持类型安全并在 C++ 领域中?所以而不是:

  1. 一种简单地比较消息的二进制内容的通用方法(获取两个 void 指针和结构的大小)

  2. 一些外部脚本,分析结构的头文件并生成比较方法

是否有任何类似的元编程巫术?可能没有,因为那时有人会很容易地用它实现 C++ 反射,但值得一试:)。

【问题讨论】:

    标签: c++ metaprogramming


    【解决方案1】:

    如果结构是普通的 POD(没有指针内部),那么您不需要有一个函数并且执行相同类型的 var A == var B 就可以了。

    在 C++0x 中,他们甚至放宽了 POD 规则,以允许具有构造函数和其他东西的类消除样板文件的负担

    http://www2.research.att.com/~bs/C++0xFAQ.html#PODs

    【讨论】:

      猜你喜欢
      • 2019-10-29
      • 1970-01-01
      • 1970-01-01
      • 2018-03-20
      • 2021-01-23
      • 2011-02-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多