GithubHelp home page GithubHelp logo

Range constructor about jsoncpp HOT 1 CLOSED

MrAdkhambek avatar MrAdkhambek commented on June 16, 2024
Range constructor

from jsoncpp.

Comments (1)

BillyDonahue avatar BillyDonahue commented on June 16, 2024 1

This would need to be very carefully done, and gated on C++23 support.

I am also not sure that we would always want it to produce an arrayValue in a range constructor.
I also don't want to accept arbitrary constructor arguments assuming they're a range pair of iterators.

I've never used std::ranges before, but I believe ranges::to can be given arguments to help select the Value constructor, like:

template <ValueType vt>
using ValueTypeTag = std::integral_constant<ValueType, vt>;

template<typename R, ValueType vt>
Json::Value(std::ranges::from_range_t, R&& r, ValueTypeTag<vt>) : Value{vt} {
    std::ranges::for_each(std::forward<R>(r), [&](auto&& x) { append(x); });
}

// ...

vector<MyMessageClass> messages = TODO()
Json::Value json = messages
                      | std::ranges::views::transform(&MyMessageClass::toJson)
                      | std::ranges::to<Json::Value>(Json::ValueTypeTag<Json::arrayValue>{});

I think you can also maybe create nonmember function to do the same thing and provide it as an argument to std::ranges::to to produce Json::Value in this way. That is, I think there's a way to get the elegant range construction you want without modifying jsoncpp at all. But I don't know this for sure.

from jsoncpp.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.