之所以写这个博客,也是为了增加C++的一些知识面,关于可变参数包处理,网上也有非常多的例子,下面这个也无非是汪洋大海中的一滴
template<typename T,typename...Arg>
concept tys = requires(T x, Arg... arg) {
requires std::is_class_v<T>;
};
template<typename T,typename... Arg>
consteval auto g(T op, std::pair<Arg, Arg>... out) requires (tys<T> || std::is_function_v<T>){
int n = 0;
while (((out.first != out.second) && ...)) {
n = op(out.first++...); // 使用op进行参数处理
}
return std::tuple(n,out...);
}
这里可以使用第一个参数对后续的参数进行处理。
以下是使用效果
constexpr auto s = g([](auto... ax) { return (... + ax); },
std::make_pair(1, 2),
std::make_pair(3, 4),
std::make_pair(5, 6));
constexpr auto s1 = std::get<0>(s); // 9