c++ - 如何将 result_of 与 const 重载成员函数一起使用

标签 c++ typetraits

有没有办法得到result_of使用 const 重载成员函数? cppreference 中演示的常规方法不起作用,因为无法解析重载函数的地址。

#include <type_traits>

class C {
public:
   auto& f () { return x_; }
   const auto& f() const { return x_; }
private:
   int x_;
};

using FRet = std::result_of_t<decltype(&C::f)(C)>;

Wandbox

最佳答案

在这种情况下不要使用 result_of - 您必须手动消除重载的歧义。您可以简单地使用 decltypestd::declval :

using FRet = decltype(std::declval<C>().f());

如果你想点击 const 重载,使用:

using FRet = decltype(std::declval<const C>().f());

关于c++ - 如何将 result_of 与 const 重载成员函数一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48865732/

相关文章:

C++:为什么 numeric_limits 对它不知道的类型起作用?

c++ - 析构函数如何在简单程序中工作?

c++ - 如何添加返回 3 个数字的函数,而不仅仅是 1 个

c++ - 为什么比较 constexpr 函数的两个参数不是静态断言的常量条件?

c++ - 将 std::type_identity 对象转换为类型

c++ - 我们应该序列化 std::chrono::duration 类还是 P.O.D. (普通旧数据)并且不需要序列化?

c++ - 理解类型特征的架构

c++ - 如何使用 type_traits 检测字符串文字?

c++ - QThread自定义事件

c++ - C++ 中 SFML 库的编译问题