You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
feat: support std::string_view in Value API (#1584)
This adds direct support for `std::string_view` when available (C++17
and above). The current API can be used with `std::string_view` via the
low-level two-pointer methods, but is not ergonomic. E.g., compare:
```
Json::Value node;
std::string foo, bar, baz;
std::string_view foo_sv, bar_sv, baz_sv;
// Efficient & readable:
node[foo][bar][baz];
// Less efficient, less readable:
node[std::string(foo_sv)][std::string(bar_sv)][std::string(baz_sv)];
// Efficient, but a lot less readable:
*node.demand(foo_sv.data(), foo_sv.data() + foo_sv.size())
->demand(bar_sv.data(), bar_sv.data() + bar_sv.size())
->demand(baz_sv.data(), baz_sv.data() + baz_sv.size())
// After this change, efficient & readable:
node[foo_sv][bar_sv][baz_sv];
```
* The constructor can take a `std::string_view` parameter. The existing
overloads taking `const std::string&` and `const char*` are still necessary
to support assignment from those types.
* `operator[]`, `get()`, `isMember()` and `removeMember()` take a
`std::string_view` parameter. This supersedes the overloads taking
`const std::string&` and `const char*`. The overloads taking a pair of
pointers (begin, end) are preserved for source compatibility.
* `getString()` has an overload with a `std::string_view` output parameter.
The one with a pair of pointers is preserved for source compatibility.
Signed-off-by: Lev Kandel <[email protected]>
Co-authored-by: Jordan Bayles <[email protected]>
0 commit comments