Browse Source

doc: more about the new meta context rework

Michele Caini 3 years ago
parent
commit
d125229312
1 changed files with 35 additions and 0 deletions
  1. 35 0
      docs/md/meta.md

+ 35 - 0
docs/md/meta.md

@@ -986,3 +986,38 @@ std::swap(context, other);
 
 
 This can be useful for testing purposes or to define multiple contexts with
 This can be useful for testing purposes or to define multiple contexts with
 different meta objects to be used as appropriate.
 different meta objects to be used as appropriate.
+
+If _replacing_ the default context isn't enough, `EnTT` also offers the ability
+to use multiple and externally managed contexts with the runtime reflection
+system.<br/>
+For example, to create new meta types within a context other than the default
+one, simply pass it as an argument to the `meta` call:
+
+```cpp
+entt::meta_ctx context{};
+auto factory = entt::meta<my_type>(context).type("reflected_type"_hs);
+```
+
+By doing so, the new meta type won't be available in the default context but
+will be usable by passing around the new context when needed, such as when
+creating a new `meta_any` object:
+
+```cpp
+entt::meta_any any{context, std::in_place_type<my_type>};
+```
+
+Similarly, to search for meta types in a context other than the default one, it
+will be necessary to pass it to the `resolve` function:
+
+```cpp
+entt::meta_type type = entt::resolve(context, "reflected_type"_hs)
+```
+
+More generally, when using externally managed contexts, it's always required to
+provide the system with the context to use, at least at the _entry point_.<br/>
+For example, once the `meta_type` instant is obtained, it's no longer necessary
+to pass the context around as the meta type takes the information with it and
+eventually propagates it to all its parts.<br/>
+On the other hand, it's necessary to instruct the library on where meta types
+are to be fetched when `meta_any`s and `meta_handle`s are constructed, a factory
+created or a meta type resolved.