我有一个看起来像这样的结构:
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。我想测试一些看似显而易见的东西有几个原因:
在C ++ 03中我有什么选择?我不在乎它是编译时间还是运行时检查,只是允许我在我的测试驱动程序中执行断言的东西。
答案 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());