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

时间:2016-06-13 13:22:00

标签: c++ templates c++11 variadic-templates

假设我有一个类bar,其中包含方法foo的多个实现:

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

我是否有可能获得一系列参数列表&#39;类型?换句话说,我定义了

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

并希望获得list<list<int, int>, list<float, bool>, list<const vector<void*>&>>

1 个答案:

答案 0 :(得分:2)

没有

您可以提出问题“我可以使用args bar.foo拨打int, long吗?”。您可以提出问题“&Bar::foo类型的void (Bar::*)(int, int)方法是否存在?”,但不符合您的要求。

你可以做的另一件事是完美转发bar.foo,甚至进行SFINAE测试,因此无法转发导致转发接口失败,而不是在其实现中。

如果你有一个有限的类型列表和最大arg计数,你可以用O(T ^ N)成本穷尽地搜索那些有效的超载集,或者用于精确的签名匹配。

作为一篇社论,您的问题通常存在这类问题的缺陷,在这些问题中,您描述了特定的技术挑战,甚至无法随意描述此挑战旨在解决的问题。实际上令人震惊的是,“我想反思函数签名超载”问题的可靠程度从来都没有,他们自愿提出他们的反思意图解决的特定问题。许多这样的问题都有解决方案,无需全面反思即可解决。