繁体   English   中英

可变参数模板:重载分辨率

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM