我发现自己正在编写如下代码:

template <class T>
inline bool allequal(T a,T b,T c) {return a==b&&a==c;}
template <class T>
inline bool allequal(T a,T b,T c,T d) {return a==b&&a==c&&a==d;}
template <class T>
inline bool allequal(T a,T b,T c,T d,T e) {return a==b&&a==c&&a==d&&a==e;}

我想知道是否有一种自动化的方法,而无需使用 vector 或可变参数,因为速度在这种情况下很重要。

最佳答案

您可以尝试以下方法:

#include <iostream>

template< typename T >
inline bool allequal( const T& v )
{
  return true;
}

template< typename T, typename U, typename... Ts >
inline bool allequal( const T& v, const U& v1, const Ts&... Vs)
{
  return (v == v1) && allequal( v1, Vs... );
}

int main()
{
    std::cout << std::boolalpha;
    std::cout << allequal(1, 1, 1, 1) << std::endl;
    std::cout << allequal(1, 1, 2, 2) << std::endl;
    return 0;
}

AFAIK提出了C++ 17的建议,包括使用运算符自定义扩展可变参数模板,这些运算符可以避免这种递归和这种丑陋的(IMO)终止,其中return true是一个参数。

注意:许多参数可能无法内联。

08-24 21:52