如何获得通过重载解析选择的函子签名?

时间:2019-06-17 15:58:30

标签: c++

我想根据参数来获取任意类型的operator()的类型。

template<typename F, typename... Args>
constexpr auto call_ptr =
    static_cast<std::invoke_result_t<F, Args...> (F::*)(Args...)>(&F::operator());

但是,call_ptr不适用于过载解析。例如,这些都失败

struct S {
    void operator()(double) {}
    void operator()(int) {}
};
call_ptr<S, char>;

call_ptr<decltype([](auto&&){}), int>;

我怎么写call_ptr

1 个答案:

答案 0 :(得分:4)

无法执行此操作,但是建议将此功能添加到语言中:http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2014/n3866.html