如何创建一个方法来比较 C++ 中未知数量的字符串?

How to create a method that compares an unknown number of strings in C++?

经过一些研究,我发现在 C++ 中,我可以用这种方式创建一个具有无限变量的函数:

template<typename ... Args>
void func(Args... a) {
    /* CODE */
}

我想创建一个方法来比较未知数量的字符串并给出一个布尔值:如果相等则为真,如果不相等则为假。

我做了类似的事情,但我不知道如何迭代字符串。

template<typename ... Strings>
bool cmp(string first, Strings... rest) {
    /* ITERATE AND COMPARE */

    return false;
}

那么我如何迭代它们呢?

术语无限变量不正确。 C++ 可以处理可变数量的函数参数,但不能处理无限多的函数参数。

如果可以使用 C++17,fold expression 将是最简单的解决方案:

template<typename ... Ts>
bool cmp(const std::string& first, const std::string& second, const Ts&... rest) {
    return (cmp(second, rest) && ... && (second == first));
}

再次使用 C++17,您还可以使用递归方法 if constepxr:

template<typename ... Ts>
bool cmp(const std::string& first, const std::string& second, const Ts&... rest) {
    if constexpr (!sizeof...(Ts)) {  // Do we have only two arguments left?
        return first == second;
    } else {
        return first == second && cmp(second, rest...);
    }
}

对于 C++14,您可以简单地重载两个参数版本并再次使用递归:

bool cmp(const std::string& first, const std::string& second) {
    return first == second;
}

template<typename ... Ts>
bool cmp(const std::string& first, const std::string& second, const Ts&... rest) {
    return first == second && cmp(second, rest...);
}