我发现自己写的代码是这样的:
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
。
注意:对于许多参数,这可能无法内联。
关于具有可变数字或参数的函数的 C++ 静态编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30665774/