Giter Site home page Giter Site logo

Accessing parsed numbers about json HOT 4 CLOSED

boostorg avatar boostorg commented on May 15, 2024
Accessing parsed numbers

from json.

Comments (4)

vinniefalco avatar vinniefalco commented on May 15, 2024

Yes I agree that we need something, I am just not sure on what it should be or what we should call it. Although I think a separate number class might not be great (I had it that way originally but it was clumsy). How about this

auto jv = parse( "42 ");
std::cout << number_cast<short>(jv);

?

from json.

vinniefalco avatar vinniefalco commented on May 15, 2024

Give this a whirl? https://github.com/vinniefalco/json/pull/19

from json.

PkmX avatar PkmX commented on May 15, 2024

LGTM functionality-wise, though I'd prefer it to be a member function and it should also mirror the accessor functions of other value kinds:

const auto jv = json::parse("42");
jv.is_number<T>(); // check if the number fits into T
jv.as_number<T>(); // checked conversion to T
jv.get_number<T>(); // unchecked conversion to T
jv.if_number<T>(); // pointer access

Then we can get rid of the *_int64, *_uint64 and *_double functions or simply make them simply to *_number functions.

from json.

vinniefalco avatar vinniefalco commented on May 15, 2024

I'd prefer it to be a member function

Hmm...I see some problems with this interface. First of all in generic contexts you would have to write jv.template is_number<T>() which isn't pretty. But the bigger problem is that these functions have different semantics but the same names as other functions (e.g. is_object).

For example this cannot be implemented:

jv.if_number<short>()

Because a json::value doesn't store a short internally, only a std::int64_t.

value::get_number<T> has different semantics from value::get_object. The first one performs a conversion while the second one returns a reference.

numeric_cast is more readily understood by users since it uses the same interface as static_cast and duration_cast.

Finally, the implementation of numeric_cast uses only public members of json::value, making it an ideal candidate for treatment as a free function.

This is why I went with numeric_cast.

from json.

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.