Генерация набора методов для проверки содержимого сообщений - PullRequest
1 голос
/ 01 сентября 2010

в моей структуре модульного тестирования для некоторых сообщений (которые являются просто структурами POD) мне нужен метод для сравнения двух таких сообщений (структур) на равенство всех полей.Например, если у меня есть сообщение:

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

У меня есть метод, который берет два указателя на SExampleMessage и возвращает true, если все поля равны в обеих структурах:

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

(Указатели, конечно, могут быть недействительными * и приведены к правильному типу)

Мой вопрос: есть ли способ избежать написания этого стандартного кода, оставаясь безопасным для типов и в области C ++?Поэтому вместо:

  1. Один универсальный метод, который просто сравнивает двоичное содержимое сообщений (получая два пустых указателя и размер структуры)

  2. Какой-то внешний скрипт, который анализирует заголовочный файл структуры и генерирует метод сравнения

Есть ли какой-нибудь метапрограммирующий вуду, который делает подобное?Возможно, нет, потому что тогда кто-то мог бы легко реализовать отражение C ++, но это стоит попробовать :).

1 Ответ

2 голосов
/ 01 сентября 2010

Если структуры представляют собой простой POD (без внутренних указателей), то вам не нужно иметь функцию, и выполнение var A == var B того же типа вполне подойдет.

В C ++ 0x они даже ослабили правила POD, чтобы классы с конструкторами и другими вещами могли избавиться от этого бремени шаблонов

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

...