高效的可变参数等于任何函数
Efficient variadic equals-any function
我想创建一个函数,返回第一个参数是否等于任何其他参数。这就是我想出的:
template<typename T, typename... U>
bool equalsAny(T first, U... args) {
U arr[] {args...};
for (auto& arg : arr) if (first == arg) return true;
return false;
}
这当然非常慢,因为必须为所有参数创建一个数组。有没有办法通过例如使用 c++17 折叠表达式来使其几乎与first == arg1 || first == arg2 || ...
一样快?
你标记了 C++17 所以...模板折叠有什么问题?
template <typename T, typename... U>
bool equalsAny (T first, U... args)
{ return (first == args || ...); }
在 C++17 之前,您可以使用未使用的 C 样式数组的初始化(我不是专家,但我认为一个好的编译器可以很好地优化它(
template <typename T, typename... U>
bool equalsAny (T first, U... args)
{
using unused = bool[];
bool ret { false };
(void)unused { false, (ret = ret || (first == args))... };
return ret;
}
相关文章:
- C++中是否有任何函数等同于python中字典的get函数?
- 这个基于范围的'for'语句需要一个合适的函数,但找不到任何函数
- uninit_member:非静态类成员m_wszParams未在此构造函数中初始化,也不在它C++中调用的任何函数中初
- 是 C++ gcc HEAD 10.0.0 20190 相对于好友函数的错误吗?
- 是否有任何 C 函数或 API 来获取当前登录用户下运行的进程列表
- 为运算符编写模板<<适用于任何向量
- 高效的可变参数等于任何函数
- 如何推广下面的模板类以调用任何函数?
- STD ::在模板函数中应用于构造函数
- 使自由函数的行为类似于成员函数 (C++)
- C++ std::string 中是否有任何函数可以计算两个字符串的相同起始字符的总数或任何最佳方法
- 有没有办法为任何函数编写通用代码,以便它可以(异步)执行并从线程池中获得返回值?
- 可以将属性应用于构造函数参数
- 是否有任何函数可用于在 c++ 编程中传输流程,以替代 while 或 do while 循环
- 严格别名规则是否适用于跨函数调用
- 库路径绝对是正确的,可以创建所述库的实例,但在调用任何函数时"Undefined reference"
- 为什么"return 0"适用于在函数中返回指针,但不适用于参考?
- 从数组中删除元素,而无需在 c++ 中内置任何函数
- 是否有任何函数可以从 wxtreelistctrl 获取所有选定的叶节点
- 适用于任何枚举类型的C++11哈希函数