【问题标题】:Pointer to const overloaded member function指向 const 重载成员函数的指针
【发布时间】:2016-02-26 01:37:03
【问题描述】:

我有一个类对成员具有 const 重载的访问器方法。这些访问器使用decltype 声明,这是我的同事遵循的约定。现在,我需要创建一个指向访问器函数的 const 版本的指针。我正在尝试使用 result_of 来做到这一点,但我没有取得任何成功。有人可以帮忙吗?

#include<type_traits>

class A{
    int _member;
    public:
    const decltype(_member) &member() const;
    decltype(_member) &member();    
};

std::result_of<static_cast<const A *>(nullptr)->member()>::type (A::*fnPtr)() const = &A::member;

【问题讨论】:

  • 你不希望有result_of。你想要decltype。

标签: c++ function pointers c++11


【解决方案1】:
decltype(std::declval<const A&>().member()) (A::*fnPtr)() const = &A::member;

【讨论】:

  • decltype(static_cast&lt;const A *&gt;(nullptr)-&gt;member()) (A::*fnPtr)() const = &amp;A::member; 在看到你回答之前我已经尝试过了,这也很有效。做我所做的事情是不好的做法吗?
  • @user2308211 两者都可以。使用declval 更惯用且更短,并且更容易控制值类别(declval&lt;A&gt;() 是右值,declval&lt;A&amp;&gt;() 是左值)。
猜你喜欢
  • 2011-03-04
  • 1970-01-01
  • 2014-10-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-28
  • 1970-01-01
相关资源
最近更新 更多