Dev*_*ull 9 c++ templates initializer-list c++14 c++17
我想编写一个辅助函数,如:
template <typename F, typename Range1, typename Range2>
auto helper(const Range1& left, const Range2& right, F&& pred)
{
using namespace std; // for cbegin/cend and ADL
return pred(cbegin(left), cend(left), cbegin(right), cend(right));
}
Run Code Online (Sandbox Code Playgroud)
它适用于容器:
std::vector<int> v1 = {1,2,3,4,5,6};
std::vector<int> v2 = {5,4,3,2,1,6};
std::cout << helper(v1, v2, [](const auto&... args){ return std::is_permutation(args...);}) << std::endl;
Run Code Online (Sandbox Code Playgroud)
但它没有推断initializer_list--s(例子):
std::cout << helper({1,2,3,4,5,6}, {5,4,3,2,1,6}, [](const auto&... args){ return std::is_permutation(args...);}) << std::endl;
Run Code Online (Sandbox Code Playgroud)
是否有一种惯用的重写方式,helper以便它推导出容器和initializer_list-s?
对于容器和容器的所有组合,initializer_list我无法想出任何比重载更好的东西.