C++03: Как получить тип возвращаемого значения функции?

У меня есть структура, которая выглядит примерно так:

struct Foo {
    typedef size_t result_type;

    template <class TYPE>
    result_type operator()(const TYPE& type) const;
};

Я тестирую эту структуру, и я хочу быть в состоянии утверждать, что тип возвращаемого значения operator() равно size_t, Если бы я мог использовать C++11, я бы пошел в decltypeОднако у меня есть доступ только к C++03. Есть несколько причин, по которым я хочу проверить что-то настолько очевидное:

  1. У моей команды очень строгие правила тестирования, где даже вещи, которые можно проверить визуально, должны быть проверены
  2. Регрессионное тестирование. Я хочу убедиться, что это не изменится в будущем.
  3. Это более упрощенная версия кода, все немного сложнее и заслуживает большего тестирования в полной версии.

Какие варианты я должен сделать это в C++03? Мне все равно, будет ли это проверка времени компиляции или выполнения, просто то, что позволяет мне сделать утверждение в моем тестовом драйвере.

2 ответа

Решение

C++03 не может напрямую запрашивать тип возвращаемого значения. Вы можете вывести его с помощью шаблона функции (как предлагает Коди Грей в комментариях), но для целей тестирования вам не нужно этого делать. Просто вызовите тестируемую функцию и передайте результат в набор перегрузки, например:

template <typename AnythingElse>
void Foo(AnythingElse const&) { assert(false); }

void Foo(YourType const&) { /* pass */ }

Тем не менее, я бы сказал, что тестирование возвращаемого типа, вероятно, является ошибкой - тестирование детали реализации вместо результатов тестирования.

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

assert(EXPECTED_SIZE == sizeof(result_type));
assert(EXPECTED_MIN == std::numeric_limits<result_type>::min());
assert(EXPECTED_MAX == std::numeric_limits<result_type>::max());
Другие вопросы по тегам