生成一组用于检查消息内容的方法

时间:2010-09-01 13:28:36

标签: c++ metaprogramming

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

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

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

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

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

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

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

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

  3. 有没有任何元编程伏都教做类似的事情?可能没有,因为那时有人会轻易用它来实现C ++反射,但值得一试:)。

1 个答案:

答案 0 :(得分:2)

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

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

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