我有一个类似这样的结构:
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中,我要做什么选择呢?我不在乎它是编译时还是运行时检查,只是允许我在测试驱动程序中执行断言。
发布于 2014-08-11 15:25:25
C++03没有直接请求返回类型的方法。您可以使用函数模板(正如Cody在注释中建议的那样)来推断它,但是为了测试目的,您不需要这样做。只需调用测试中的函数,并将结果传递给这样的重载集:
template <typename AnythingElse>
void Foo(AnythingElse const&) { assert(false); }
void Foo(YourType const&) { /* pass */ }也就是说,我认为测试返回类型可能是一个错误--测试实现细节而不是测试结果。
发布于 2014-08-11 15:53:35
如果需要强制某些数据结构或消息的二进制兼容性,则可能需要检查类型的属性,而不是类型本身。在两种不同的体系结构中,对于所谓的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());https://stackoverflow.com/questions/25246307
复制相似问题