我有一个看起来像这样的结构:
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中执行哪些选择?我不在乎是编译时检查还是运行时检查,只是让我能够在测试驱动程序中执行断言的一项。
最佳答案
C++ 03没有直接询问返回类型的方法。您可以使用功能模板来推断它(正如Cody Gray在注释中所建议的那样),但是出于测试目的,您不需要这样做。只需调用被测函数,然后将结果传递给这样的重载集即可:
template <typename AnythingElse>
void Foo(AnythingElse const&) { assert(false); }
void Foo(YourType const&) { /* pass */ }
就是说,我会说测试返回类型可能是一个错误-测试实现细节而不是测试结果。
关于c++ - C++ 03:如何获取函数的返回类型?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25246307/