Comments (2)
Created this PR #1098 which also includes fixes for issue #1092
from glaze.
This issue is due to the fact that a std::variant
isn't necessarily an object. In this example the variant types all contain object types, so they should be considered objects. However, this recursive compile time type analysis is not simple, especially when trying to filter types.
I think the filtering code needs to be improved and optimized before this feature is added. I've pasted the current filtering code below. I'm removing the bug
label because this is technically a limitation and not broken code.
I did improve the std::variant
handling logic recently and added support for std::shared_ptr
and std::unique_ptr
in variants, but this effort is not a primary focus right now.
template <class>
struct variant_types;
template <class... Ts>
struct variant_types<std::variant<Ts...>>
{
// TODO: this way of filtering types is compile time intensive.
using bool_types = decltype(tuplet::tuple_cat(
std::conditional_t<bool_t<remove_meta_wrapper_t<Ts>>, tuplet::tuple<Ts>, tuplet::tuple<>>{}...));
using number_types = decltype(tuplet::tuple_cat(
std::conditional_t<num_t<remove_meta_wrapper_t<Ts>>, tuplet::tuple<Ts>, tuplet::tuple<>>{}...));
using string_types = decltype(tuplet::tuple_cat( // glaze_enum_t remove_meta_wrapper_t supports constexpr
// types while the other supports non const
std::conditional_t < str_t<remove_meta_wrapper_t<Ts>> || glaze_enum_t<remove_meta_wrapper_t<Ts>> ||
glaze_enum_t<Ts>,
tuplet::tuple<Ts>, tuplet::tuple < >> {}...));
using object_types =
decltype(tuplet::tuple_cat(std::conditional_t<json_object<Ts>, tuplet::tuple<Ts>, tuplet::tuple<>>{}...));
using array_types =
decltype(tuplet::tuple_cat(std::conditional_t < array_t<remove_meta_wrapper_t<Ts>> || glaze_array_t<Ts>,
tuplet::tuple<Ts>, tuplet::tuple < >> {}...));
using nullable_types =
decltype(tuplet::tuple_cat(std::conditional_t<null_t<Ts>, tuplet::tuple<Ts>, tuplet::tuple<>>{}...));
using nullable_objects = decltype(tuplet::tuple_cat(
std::conditional_t<is_memory_object<Ts>, tuplet::tuple<Ts>, tuplet::tuple<>>{}...));
};
from glaze.
Related Issues (20)
- How to correctly read into variant where structs have the same member names? HOT 1
- Compilation error because of `glaze/reflection/enum_macro.hpp` HOT 5
- Reading and Writing binary to std::vector fails with `data_must_be_null_terminated` HOT 2
- error_on_unknown_keys does not provide any info about the key in error_ctx HOT 2
- GLZ_FLATTEN adds significant compilation time on MSVC. HOT 3
- error HOT 2
- GLZ_FLATTEN adds significant compilation time on gcc. HOT 12
- host_include -> file_include -> fails parsing with `expected_comma`
- std::array<char> partial read handling HOT 9
- Binary (BEVE) support lacking for object keys HOT 8
- Type selection when reading to a variant HOT 1
- Update to v3.2.2 causes compilation errors HOT 9
- new_lines_in_arrays option should apply to writing JSON and not just prettify_json
- std::pair of structs fails round trip HOT 2
- Any struct with any members named "first" and "second" in any order is treated as a std::pair HOT 4
- can't write enum with the highest value HOT 4
- There seems to be an error. HOT 10
- Possible bug following examples in the README? HOT 1
- _GLIBCXX_DEBUG for libstdc++ cannot currently be used with glaze HOT 1
- Compilation error on 32-bit system HOT 2
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 glaze.