c++静态编译带有可变数量或参数的函数
C++ static compilation of function with a variable number or arguments
我发现自己写的代码是这样的:
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;}
我想知道是否有一种自动的方法来做到这一点,而不使用向量或可变参数,因为速度在这种情况下很重要。
你可以试试:
#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;
}
在c++ 17中有一个建议,包含可变模板的自定义扩展,使用操作符可以避免这种递归和这种丑陋的(IMO)终止,因为只有一个参数是return true
。
#include <algorithm>
#include <iterator>
template <typename T, typename... Args>
bool allequal(T a, Args... rest)
{
std::initializer_list<T> values = {a, rest...};
return std::adjacent_find(begin(values), end(values), std::not_equal_to<T>()) == end(values);
}
演示工作template<typename First, typename Second>
bool AllOf(First a, Second b)
{
return a == b;
}
template<typename First, typename Second, typename... Rest>
bool AllOf(First a, Second b, Rest... r)
{
return a == b && AllOf(b, r...);
}
std::cout << AllOf(1, 1,1,1) << "n";
std::cout << AllOf(1, 1,2) << "n";
std::cout << AllOf(1,2) << "n";
std::cout << AllOf(1,1) << "n";
相关文章:
- 将可变参数函数的参数封装在类实例中
- QML 使用带有参数C++函数
- 使用可变参数函数作为模板参数
- 如何在C++中伪造虚拟可变参数函数模板?
- 为什么可变参数函数不适用于模板
- C++ std::functional 中的可变参数函数模板
- 可变参数函数指针的定义对于VxWorks spyLib来说不清楚
- 使用可变参数函数覆盖具有不同函数签名的虚函数
- 考虑引用和常量的可变参数函数包装器
- 使用可变参数函数将整数和/或整数数组放入单个 int 数组中
- 在可变参数函数中转发特定范围的参数
- 通过引用传递参数;函数返回类型是否必须为 VOID?
- 使用带有一个参数函数的递归找到数字的平方
- 可变参数函数模板不能很好地使用 std::function 作为参数
- 多个可变参数函数的单个模板参数包?
- 参数数据类型未知的可变参数函数
- 可变参数函数参数包扩展
- 使用模板可变参数函数将多个参数传递给另一个函数
- 对可变参数函数的递归调用的链接器错误
- 通过像printf这样的可变参数函数传递一个带有常量字符*转换函数的类