C ++ 03:如何获取函数的返回类型?

时间:2014-08-11 14:57:52

标签: c++ 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. 这是代码的更简化版本,事情稍微复杂一点,在完整版中需要更多的测试。
  4. 在C ++ 03中我有什么选择?我不在乎它是编译时间还是运行时检查,只是允许我在我的测试驱动程序中执行断言的东西。

2 个答案:

答案 0 :(得分:4)

C ++ 03没有直接询问返回类型的方法。您可以使用功能模板推断它(正如Cody Gray在评论中所建议的那样)但是出于测试目的,您不需要这样做。只需调用您正在测试的函数,并将结果交给一个像这样的重载集:

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

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

那就是说,我会说测试返回类型可能是一个错误 - 测试实现细节而不是测试结果。

答案 1 :(得分:0)

如果需要强制某些数据结构或消息的二进制兼容性,您可能需要检查类型的属性而不是类型本身。这些可能会因两种不同架构中的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());