c++ - 取 boost::hana::partial::operator() 的地址
问题描述
假设我有一个做某事的 lambda:
auto thing = [](int x){ /* Stuff */ };
我想保存值“x”并稍后调用它,所以我这样做:
auto other = boost::hana::partial(thing, 42);
现在,因为我想对此进行一些类型擦除,所以我想获取operator()
.....的地址,所以我尝试这样做:
using type = decltype(other);
void (type::*ptr)(void) = &type::operator();
Clang 抱怨说,该other
对象没有满足要求的足够功能:godbolt
看来该partial
类型正在返回一个引用(到void
?)......为什么这不起作用?
解决方案
它(operator())有&
const&
&&
等重载;您的成员函数指针不符合*this
const 或 r/l value-ness。所以不匹配。
在编译失败的那一行加上&
or const&
or or &&
or const&&
before =
,就可以编译了。
这是一个[MCVE]:
struct foo {
void bar()&{}
};
int main(){
auto p = &foo::bar;
void(foo::*p2)() = p; // lacks &
}
推荐阅读
- git - 克隆 git-svn 存储库会导致“消失”分支
- python - 通过应用程序引擎的 FTP 使用 Python 允许连接但超时响应
- excel - 利用不同数量的单元格进行一系列计算
- c# - 通过数据库中的 linq 使用经度和纬度查找最近的位置
- java - vscode 无法将 java 识别为一种语言
- swift - 如何使用协议函数作为块定义?
- java - 无论何时按下e,如何退出游戏?
- java - 试图在数组Java中显示项目的最后一个索引
- excel - VBA如何在有Windows句柄时使用FindWindowEx
- python - 如何提取pandas DataFrame中的属性名称和最大共现次数?