指向成员函数的指针类型需要一个右值

Posted

技术标签:

【中文标题】指向成员函数的指针类型需要一个右值【英文标题】: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) 【参考方案1】:

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

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

【讨论】:

请改写你的答案,因为问题被改变了。

以上是关于指向成员函数的指针类型需要一个右值的主要内容,如果未能解决你的问题,请参考以下文章

C++|详解类成员指针:数据成员指针和成员函数指针及应用场合

指向任何类类型的非静态成员函数的 C++ 函数指针

C++函数指针与成员函数指针

指向不同类的成员函数的指针

指向模板类成员函数的函数指针

指向不完整类型成员函数的指针