假设我有一个类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*>&>>
。
答案 0 :(得分:2)
没有
您可以提出问题“我可以使用args bar.foo
拨打int, long
吗?”。您可以提出问题“&Bar::foo
类型的void (Bar::*)(int, int)
方法是否存在?”,但不符合您的要求。
你可以做的另一件事是完美转发到bar.foo
,甚至进行SFINAE测试,因此无法转发导致转发接口失败,而不是在其实现中。
如果你有一个有限的类型列表和最大arg计数,你可以用O(T ^ N)成本穷尽地搜索那些有效的超载集,或者用于精确的签名匹配。
作为一篇社论,您的问题通常存在这类问题的缺陷,在这些问题中,您描述了特定的技术挑战,甚至无法随意描述此挑战旨在解决的问题。实际上令人震惊的是,“我想反思函数签名超载”问题的可靠程度从来都没有,他们自愿提出他们的反思意图解决的特定问题。许多这样的问题都有解决方案,无需全面反思即可解决。