[英]Variadic Templates: Overload resolution
#include <iostream>
template<typename T>
bool pair_comparer(T a, T b) {
return a != b;
}
template<typename T, typename... Args>
bool pair_comparer(T a, T b, Args... args) {
return a == b && pair_comparer(args...);
}
int main() {
bool areSame = pair_comparer(1, 1, 2, 2, 6, 6);
std::cout << "areSame " << areSame << endl; // prints 0
return 0;
}
我不希望示例可以编译,但是可以。 在这里如何解决对带有两个参数的pair_comparer
的调用? 有什么我想念的吗
在对pair_comparer
的第一次调用中,您具有:
a = 1,b = 1和args = [2,2,6,6]
然后您有一个对pair_comparer
的递归调用,这次您有:
a = 2,b = 2和args = [6,6]
最后,您可以使用args = [6,6]来调用pair_comparer(T a, T b)
。
但是你必须把return a == b;
而不是return a != b;
在bool pair_comparer(T a, T b)
中得到正确的答案。 这意味着所有数字成对相等
但是,如果仅通过两个参数开始调用:
例如:
bool areSame = pair_comparer(6, 6);
该程序将直接调用:pair_comparer(T a,T b),因为它是第一个匹配项(我们只有2个参数,而没有更多)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.