首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++03:如何获得函数的返回类型?

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

Stack Overflow用户
提问于 2014-08-11 14:57:52
回答 2查看 133关注 0票数 1

我有一个类似这样的结构:

代码语言:javascript
复制
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. 这是一个更简单的代码版本,事情有点复杂,值得在完整的版本中进行更多的测试。

在C++03中,我要做什么选择呢?我不在乎它是编译时还是运行时检查,只是允许我在测试驱动程序中执行断言。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-08-11 15:25:25

C++03没有直接请求返回类型的方法。您可以使用函数模板(正如Cody在注释中建议的那样)来推断它,但是为了测试目的,您不需要这样做。只需调用测试中的函数,并将结果传递给这样的重载集:

代码语言:javascript
复制
template <typename AnythingElse>
void Foo(AnythingElse const&) { assert(false); }

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

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

票数 4
EN

Stack Overflow用户

发布于 2014-08-11 15:53:35

如果需要强制某些数据结构或消息的二进制兼容性,则可能需要检查类型的属性,而不是类型本身。在两种不同的体系结构中,对于所谓的size_t,这种情况可能会发生变化。

代码语言:javascript
复制
assert(EXPECTED_SIZE == sizeof(result_type));
assert(EXPECTED_MIN == std::numeric_limits<result_type>::min());
assert(EXPECTED_MAX == std::numeric_limits<result_type>::max());
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25246307

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档