Comments (5)
I think this would be better off as a fork than built-in - it's a substantial code-ugliness / maintainability hit for something that's not useful for most users. @artwyman, thoughts?
from json11.
I don't have a strong opinion (given I introduced a similar hack in the unit tests) but I lean the same direction as @j4cbo. A macro for the class name will reduce readability, and also work only for people with a custom string type which has the same interface as std::string. On the flip side, a private fork for this would be pretty easy to maintain and merge, or alternatively a wrapper type around this one which did conversions. I think if making the string type configurable in this library, it might make sense to go farther with a policy template approach and a type alias, which would also be an approach which would let the people who want 64-bit ints parameterize that too (e.g. using Json=JsonGeneric<std::string, int64_t, double>;
) but that approach also reduces readability in things like compiler errors, as has been proven with std::basic_string<> in the past, and is really a different goal than the current goal of json11, which includes being small and simple.
from json11.
Alright, I will continue with my own fork then :)
@artwyman the template idea sounds solid. My string class is designed to be mostly compatible with std::string, so it should probably work without modifications.
from json11.
Not directly related to this library, but I'm curious to hear what the key features are which lead to maintaining your own string class. We made one at my prior company in 2003 primarily for built-in Unicode support, but the amount of maintenance effort and risk of bugs has caused me to always lean away from the idea since, particularly now that the STL is more fleshed out and well supported than it was in 2003.
from json11.
Yeah, this actually stems from back in 2004-2005 or so but has been maintained over the years.
I still see a few advantages actually...
The initial motivation however is not relevant today - to generate a smaller binary for demoscene productions (linking with stl adds a few 100kb of bloat).
But unicode support definitely - the character type is a template param so char or wchar_t can be supplied for instance.
My string class internally uses a generic container (which I also wrote as a replacement for std::vector) with just the string-related methods on top, (https://github.com/vovoid/vsxu/blob/0.6.0/lib/common/include/string/vsx_string.h#L38) which means I can feed it a pointer inside a mmaped file. This in turn depends on the underlying container class having support for marking its data as volatile via a method call (which then does not attempt to free its data in its destructor) and a set_data() method. Maybe one can do this with some stl allocator tricks, but this still seems more straight forward to me.
Very useful for reading files from a DVD for instance.
By having full control over the storage container as well, one can pick an optimal re-allocation factor when it grows, I read some paper that it was best (on average) to grow the data allocated by 33%.
https://github.com/vovoid/vsxu/blob/0.6.0/lib/common/include/container/vsx_nw_vector.h#L250
Some of this is trickery for sure, but this is geared towards performance for games and real time graphics.
from json11.
Related Issues (20)
- is it possible to add fields to the json? HOT 1
- in json11.cpp line 161 , why use static_cast, what if a json object is a runtime parsed object HOT 1
- clang 6.0 compilation error HOT 2
- Check if a json object key exists HOT 2
- differentiate between "number" and "integer" as per json schema HOT 1
- Tag Versioning HOT 6
- Number size issue.
- Can't parse wstring?
- auto casting HOT 4
- has_shape() always returns true when used with json11::Json::NUL HOT 1
- [Feature] conan package manager support HOT 1
- Order serealization Json::object HOT 2
- ASAN reports runtime error HOT 1
- swig4.0.0 and mingw compile the test.cpp(main modified to be a function) :error: 'final' is not a member of 'json11' HOT 3
- can't be loaded as a dll in low version c++? HOT 2
- Warning '-Werror=overloaded-virtual' with gcc-5.1.0 --std=c++14 HOT 1
- Making object_items(), array_items() not const or alternatively support mutable_object_items() HOT 1
- Super stuff. HOT 1
- No API to add Json (f.e. array) to Json::object outside of ctor. HOT 1
- Buliding for windows? HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
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.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from json11.