首页 > 解决方案 > 取 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?)......为什么这不起作用?

标签: c++c++14function-pointersboost-hana

解决方案


它(operator())有& const& &&等重载;您的成员函数指针不符合*thisconst 或 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 &
}

推荐阅读