【问题标题】:pointer-to-member-function type requires an rvalue指向成员函数的指针类型需要一个右值
【发布时间】:2014-04-23 03:21:16
【问题描述】:

产生以下代码的错误是怎么回事?

struct foo
{
    void call(void (foo::*ptr)()) &&
    {
        (*this.*ptr)();
    }
};

如何解决这个错误?

【问题讨论】:

  • 您不认为将完美的关键字sizeofalignof 包含在模板中有点过头了吗?
  • 另外,这是一大堆代码。认为你可以simplify it a bit
  • @zneak 我需要元函数,而不是裸关键字。
  • @zneak 这是最小的实用示例,其中包含有趣的错误。每个函数和元函数最多包含两行代码(typedef 和 static_asserts 除外)。
  • 我认为this是最小的可行示例,解决方案是使用(std::move(*this).*ptr)

标签: c++ c++11 rvalue-reference boost-variant


【解决方案1】:

由于成员指针具有右值限定符,因此必须通过在其上使用std::move 来告知编译器*this 将被视为右值:

(std::move(*this).*ptr)();

【讨论】:

  • 请改写你的答案,因为问题被改变了。
猜你喜欢
  • 1970-01-01
  • 2017-07-27
  • 2013-06-06
  • 1970-01-01
  • 2015-11-18
  • 2015-09-04
  • 2014-09-24
  • 2018-04-14
相关资源
最近更新 更多