如何获得函数的返回类型
C++03: How to get the return type of a function?
我有一个结构体,看起来像这样:
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 */ }
也就是说,我认为测试返回类型可能是一个错误——测试实现细节而不是测试结果。
如果您需要强制某些数据结构或消息的二进制兼容性,您可能希望检查类型的属性而不是类型本身。在两个不同的体系结构中,对于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());
相关文章:
- 如何获取std::result_of函数的返回类型
- 如何建立使用模板函数的lambda函数的尾部返回类型
- 在没有定义返回类型的函数中返回布尔值,并将结果保存在无错误的char编译中-为什么
- 特征::矩阵<双精度,1,3> 结构类型函数中的返回类型函数
- 函数作为模板参数,是否对返回类型强制约束
- C++中函数的向量返回类型引发错误
- 检查函数返回类型是否与STL容器类型值相同
- 警告:在函数返回类型 [-Wignore 限定符] 时忽略类型限定符
- 为什么 c++(g++) 不允许模板返回类型和函数名称之间有空格?
- 为什么返回类型的'const'限定符对标有 __forceinline/内联的函数没有影响?
- 在 c++ 中将函数返回类型指定为模板参数
- 使用 SWIG 更改生成的 CS 函数中的返回类型
- C++ 这里有一个返回 (24) 的布尔返回类型函数
- 使用SFINAE来检测void返回类型函数的存在
- 模板返回类型函数如何在C++中工作
- 如何在返回类型函数模板的专用化中使用派生类型?( "couldn't infer template argument" )
- Bon appetit :从 int 返回类型函数在 main() 中打印字符串
- 在引用或指针返回类型函数上输入
- 在后面的返回类型函数语法中,auto关键字背后是否有意图
- 我可以在c++中重写字符串返回类型函数吗?