mirror of
https://github.com/nlohmann/json.git
synced 2026-02-24 12:26:25 +00:00
Restructure inline namespace and allow version component to be disabled (#3683)
This commit is contained in:
committed by
GitHub
parent
93112fbf4d
commit
0e61ee8b07
@@ -32,7 +32,10 @@ header. See also the [macro overview page](../../features/macros.md).
|
||||
## Library namespace
|
||||
|
||||
- [**NLOHMANN_JSON_NAMESPACE**](nlohmann_json_namespace.md) - full name of the `nlohmann` namespace
|
||||
- [**NLOHMANN_JSON_NAMESPACE_BEGIN**<br>**NLOHMANN_JSON_NAMESPACE_END**](nlohmann_json_namespace_begin.md) - open and close the library namespace
|
||||
- [**NLOHMANN_JSON_NAMESPACE_BEGIN**<br>**NLOHMANN_JSON_NAMESPACE_END**](nlohmann_json_namespace_begin.md) - open and
|
||||
close the library namespace
|
||||
- [**NLOHMANN_JSON_NAMESPACE_NO_VERSION**](nlohmann_json_namespace_no_version.md) - disable the version component of
|
||||
the inline namespace
|
||||
|
||||
## Type conversions
|
||||
|
||||
|
||||
@@ -1,19 +1,18 @@
|
||||
# NLOHMANN_JSON_NAMESPACE
|
||||
|
||||
```cpp
|
||||
#define NLOHMANN_JSON_NAMESPACE
|
||||
#define NLOHMANN_JSON_NAMESPACE /* value */
|
||||
```
|
||||
|
||||
This macro evaluates to the full name of the `nlohmann` namespace, including the name of a versioned and ABI-tagged
|
||||
inline namespace. Use this macro to unambiguously refer to the `nlohmann` namespace.
|
||||
This macro evaluates to the full name of the `nlohmann` namespace.
|
||||
|
||||
## Default definition
|
||||
|
||||
The default value consists of a prefix, a version string, and optional ABI tags depending on whether ABI-affecting
|
||||
macros are defined (e.g., [`JSON_DIAGNOSTICS`](json_diagnostics.md), and
|
||||
[`JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON`](json_use_legacy_discarded_value_comparison.md)).
|
||||
The default value consists of the root namespace (`nlohmann`) and an inline ABI namespace. See
|
||||
[`nlohmann` Namespace](../../features/namespace.md#structure) for details.
|
||||
|
||||
When the macro is not defined, the library will define it to its default value.
|
||||
When the macro is not defined, the library will define it to its default value. Overriding this value has no effect on
|
||||
the library.
|
||||
|
||||
## Examples
|
||||
|
||||
@@ -35,7 +34,8 @@ When the macro is not defined, the library will define it to its default value.
|
||||
## See also
|
||||
|
||||
- [`NLOHMANN_JSON_NAMESPACE_BEGIN, NLOHMANN_JSON_NAMESPACE_END`](nlohmann_json_namespace_begin.md)
|
||||
- [`NLOHMANN_JSON_NAMESPACE_NO_VERSION`](nlohmann_json_namespace_no_version.md)
|
||||
|
||||
## Version history
|
||||
|
||||
- Added in version 3.11.0.
|
||||
- Added in version 3.11.0. Changed inline namespace name in version 3.11.2.
|
||||
|
||||
@@ -1,30 +1,35 @@
|
||||
# NLOHMANN_JSON_NAMESPACE_BEGIN, NLOHMANN_JSON_NAMESPACE_END
|
||||
|
||||
```cpp
|
||||
#define NLOHMANN_JSON_NAMESPACE_BEGIN // (1)
|
||||
#define NLOHMANN_JSON_NAMESPACE_END // (2)
|
||||
#define NLOHMANN_JSON_NAMESPACE_BEGIN /* value */ // (1)
|
||||
#define NLOHMANN_JSON_NAMESPACE_END /* value */ // (2)
|
||||
```
|
||||
|
||||
These macros can be used to open and close the `nlohmann` namespace. They include an inline namespace used to
|
||||
differentiate symbols when linking multiple versions (including different ABI-affecting macros) of this library.
|
||||
These macros can be used to open and close the `nlohmann` namespace. See
|
||||
[`nlohmann` Namespace](../../features/namespace.md#structure) for details.
|
||||
|
||||
1. Opens the namespace.
|
||||
```cpp
|
||||
namespace nlohmann
|
||||
{
|
||||
inline namespace json_v3_11_0
|
||||
{
|
||||
```
|
||||
|
||||
2. Closes the namespace.
|
||||
```cpp
|
||||
} // namespace nlohmann
|
||||
} // json_v3_11_0
|
||||
```
|
||||
|
||||
## Default definition
|
||||
|
||||
The default definitions open and close the `nlohmann` as well as an inline namespace.
|
||||
The default definitions open and close the `nlohmann` namespace. The precise definition of
|
||||
[`NLOHMANN_JSON_NAMESPACE_BEGIN`] varies as described [here](../../features/namespace.md#structure).
|
||||
|
||||
1. Default definition of `NLOHMANN_JSON_NAMESPACE_BEGIN`:
|
||||
|
||||
```cpp
|
||||
namespace nlohmann
|
||||
{
|
||||
inline namespace json_abi_v3_11_2
|
||||
{
|
||||
```
|
||||
|
||||
2. Default definition of `NLOHMANN_JSON_NAMESPACE_END`:
|
||||
```cpp
|
||||
} // namespace json_abi_v3_11_2
|
||||
} // namespace nlohmann
|
||||
```
|
||||
|
||||
When these macros are not defined, the library will define them to their default definitions.
|
||||
|
||||
@@ -32,7 +37,7 @@ When these macros are not defined, the library will define them to their default
|
||||
|
||||
??? example
|
||||
|
||||
The example shows an example how to use `NLOHMANN_JSON_NAMESPACE_BEGIN`/`NLOHMANN_JSON_NAMESPACE_END` from the
|
||||
The example shows how to use `NLOHMANN_JSON_NAMESPACE_BEGIN`/`NLOHMANN_JSON_NAMESPACE_END` from the
|
||||
[How do I convert third-party types?](../../features/arbitrary_types.md#how-do-i-convert-third-party-types) page.
|
||||
|
||||
```cpp
|
||||
@@ -47,8 +52,10 @@ When these macros are not defined, the library will define them to their default
|
||||
|
||||
## See also
|
||||
|
||||
- [`nlohmann` Namespace](../../features/namespace.md)
|
||||
- [NLOHMANN_JSON_NAMESPACE](nlohmann_json_namespace.md)
|
||||
- [`NLOHMANN_JSON_NAMESPACE_NO_VERSION`](nlohmann_json_namespace_no_version.md)
|
||||
|
||||
## Version history
|
||||
|
||||
- Added in version 3.11.0.
|
||||
- Added in version 3.11.0. Changed inline namespace name in version 3.11.2.
|
||||
|
||||
@@ -0,0 +1,45 @@
|
||||
# NLOHMANN_JSON_NAMESPACE_NO_VERSION
|
||||
|
||||
```cpp
|
||||
#define NLOHMANN_JSON_NAMESPACE_NO_VERSION /* value */
|
||||
```
|
||||
|
||||
If defined to `1`, the version component is omitted from the inline namespace. See
|
||||
[`nlohmann` Namespace](../../features/namespace.md#structure) for details.
|
||||
|
||||
## Default definition
|
||||
|
||||
The default value is `0`.
|
||||
|
||||
```cpp
|
||||
#define NLOHMANN_JSON_NAMESPACE_NO_VERSION 0
|
||||
```
|
||||
|
||||
When the macro is not defined, the library will define it to its default value.
|
||||
|
||||
## Examples
|
||||
|
||||
??? example
|
||||
|
||||
The example shows how to use `NLOHMANN_JSON_NAMESPACE_NO_VERSION` to disable the version component of the inline
|
||||
namespace.
|
||||
|
||||
```cpp
|
||||
--8<-- "examples/nlohmann_json_namespace_no_version.cpp"
|
||||
```
|
||||
|
||||
Output:
|
||||
|
||||
```json
|
||||
--8<-- "examples/nlohmann_json_namespace_no_version.output"
|
||||
```
|
||||
|
||||
## See also
|
||||
|
||||
- [`nlohmann` Namespace](../../features/namespace.md)
|
||||
- [`NLOHMANN_JSON_NAMESPACE`](nlohmann_json_namespace.md)
|
||||
- [`NLOHMANN_JSON_NAMESPACE_BEGIN, NLOHMANN_JSON_NAMESPACE_END`](nlohmann_json_namespace_begin.md)
|
||||
|
||||
## Version history
|
||||
|
||||
- Added in version 3.11.2.
|
||||
Reference in New Issue
Block a user