#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
调用?有什么我想念的吗
答案 0 :(得分:0)
在第一次致pair_comparer
时,你有:
a = 1,b = 1,args = [2,2,6,6]
然后你有一个递归调用pair_comparer
,这次你有:
a = 2,b = 2,args = [6,6]
最后,您打电话给pair_comparer(T a, T b)
:
args = [6,6]
但是您必须在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个参数而不是更多)