链式函数调用上的C++参数包扩展

oknwwptz  于 2023-02-14  发布在  其他
关注(0)|答案(2)|浏览(131)

库通常有从成员函数返回自身示例的类型,以鼓励链接调用。例如,nlohmann json:

auto my_data = my_json_object["first key"]["second key"];

是否有某种方法可以使用参数包的内容调用成员函数?例如:

template<class... Keys>
auto get_elem(json json, Keys... keys)
{
   return json([keys]...); // -> json[keys[0]][keys[1]]...[keys[N]]
}

auto my_data = get_elem(my_json_object, "first key", "second key");
slsn1g29

slsn1g291#

最简单的是:

template<typename A, class First>
auto get_elem(A json, First first) {
   return json[first];
}

template<typename A, class First, class... Keys>
auto get_elem(A json, First first, Keys... keys) {
   return get_elem(json[first], keys...);
}
8cdiaqws

8cdiaqws2#

KamilCuk的答案是最好的,这一个只是思考的食物:

auto& get(auto& j, auto&& a, auto&& ...b)
{
  auto e(&j[a]);

  return ((e = &e->operator[](b)), ...), *e;
}

相关问题