指向成员函数的指针类型需要一个右值
Posted
技术标签:
【中文标题】指向成员函数的指针类型需要一个右值【英文标题】:pointer-to-member-function type requires an rvalue 【发布时间】:2014-04-23 03:21:16 【问题描述】:产生以下代码的错误是怎么回事?
struct foo
void call(void (foo::*ptr)()) &&
(*this.*ptr)();
;
如何解决这个错误?
【问题讨论】:
您不认为将完美的关键字sizeof
和alignof
包含在模板中有点过头了吗?
另外,这是一大堆代码。认为你可以simplify it a bit?
@zneak 我需要元函数,而不是裸关键字。
@zneak 这是最小的实用示例,其中包含有趣的错误。每个函数和元函数最多包含两行代码(typedef 和 static_asserts 除外)。
我认为this是最小的可行示例,解决方案是使用(std::move(*this).*ptr)
。
【参考方案1】:
由于成员指针具有右值限定符,因此必须通过在其上使用std::move
来告知编译器*this
将被视为右值:
(std::move(*this).*ptr)();
【讨论】:
请改写你的答案,因为问题被改变了。以上是关于指向成员函数的指针类型需要一个右值的主要内容,如果未能解决你的问题,请参考以下文章