获取所有函数重载的参数类型

Get parameter types of all function overloads

假设我有一个 class bar 方法的多个实现 foo:

struct bar {
    void foo(int, int);
    void foo(float, bool);
    void foo(const vector<void*>&);
}

我是否有可能获得参数类型列表的列表?也就是说,我定义

template<typename... types> class list {};

想获得list<list<int, int>, list<float, bool>, list<const vector<void*>&>>.

没有

您可以提出问题"can I call bar.foo with args int, long?"。您可以提出问题 "is there a &Bar::foo method of type void (Bar::*)(int, int)?",但都不符合您的要求。

你可以做的另一件事是完美转发bar.foo,甚至做SFINAE测试所以转发失败导致转发接口失败,而不是内部它的实现。

如果您有一个有限的类型列表和最大 arg 计数,您可以以 O(T^N) 的成本详尽地搜索重载集以找到有效的重载或精确的签名匹配。

作为社论,您的问题具有此类问题的常见缺陷,您在其中描述了特定的技术挑战,甚至没有随便描述该挑战旨在解决的问题。 "I want to reflect on function signature overload" 问题的可靠性实际上令人震惊,从来没有自愿提出他们的思考旨在解决的特定问题。很多很多这样的问题都有不需要全反射就能解决的解决方案。