在我的单元测试框架中,对于一些消息(它们只是POD结构),我需要一种方法来比较两个这样的消息(结构)以确保所有字段的相等性。例如,如果我有一条消息:
struct SExampleMessage
{
int someField;
int someField2;
char someField3[10];
};
我有一个方法,它接受两个指向SExampleMessage的指针,如果两个结构中的所有字段都相等,则返回true:
bool compareExampleMessage(SExampleMessage* expectedMsg,
SExampleMessage* receivedMsg);
(指针当然可以是无效*并且转换为正确的类型)
我的问题是 - 有什么办法可以避免在保持类型安全和C ++领域的同时编写这个样板代码?所以而不是:
一种简单比较消息二进制内容的通用方法(获取两个void指针和结构大小)
分析结构头文件并生成比较方法的一些外部脚本
有没有任何元编程伏都教做类似的事情?可能没有,因为那时有人会轻易用它来实现C ++反射,但值得一试:)。
答案 0 :(得分:2)
如果结构是普通POD(没有指针内部),那么你不需要有一个函数,并且做同样类型的var A == var B就可以了。
在C ++ 0x中,他们甚至放宽了POD规则,允许带有构造函数和其他东西的类来消除这种样板负担