我有一个看起来像这样的结构:

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/

    10-11 22:09