mirror of
https://github.com/msgpack/msgpack-c
synced 2026-06-08 16:11:40 +00:00
Updated version 1.1.x api versioning.
@@ -0,0 +1,72 @@
|
||||
# API versioning on C++
|
||||
|
||||
msgpack-c have introduced API versioning mechanism.
|
||||
|
||||
## Macros
|
||||
|
||||
### MSGPACK_DEFAULT_API_VERSION
|
||||
MSGPACK_DEFAULT_API_VERSION means the default version of msgpack-c API. The current value is 1.
|
||||
|
||||
```C++
|
||||
#if !defined(MSGPACK_DEFAULT_API_VERSION)
|
||||
#define MSGPACK_DEFAULT_API_VERSION 1
|
||||
#endif
|
||||
```
|
||||
|
||||
When you want to set MSGPACK_API_VERSION explicitly, give the macro value as follows:
|
||||
|
||||
```
|
||||
g++ -DMSGPACK_API_VERSION=2
|
||||
```
|
||||
|
||||
### MSGPACK_DEFAULT_API_NS
|
||||
|
||||
MSGPACK_DEFAULT_API_NS is a namespace name of the default msgpack version. It names 'v' + MSGPACK_DEFAULT_API_VERSION. e.g.) v1, v2, ...
|
||||
|
||||
It is used when you declare and define your custom overloads of operators.
|
||||
|
||||
See the following example:
|
||||
|
||||
https://github.com/msgpack/msgpack-c/blob/master/example/cpp03/class_non_intrusive.cpp#L47
|
||||
|
||||
### MSGPACK_API_VERSION_NAMESPACE
|
||||
|
||||
MSGPACK_API_VERSION_NAMESPACE is a function style macro. It defines a namespace. You can pass an argument as the namespace you want to define.
|
||||
|
||||
```C++
|
||||
MSGPACK_API_VERSION_NAMESPACE(v1) {
|
||||
// ...
|
||||
}
|
||||
|
||||
MSGPACK_API_VERSION_NAMESPACE(v2) {
|
||||
// ...
|
||||
}
|
||||
```
|
||||
|
||||
The macro is expanded to namespace. If the given namespace name is same as MSGPACK_DEFAULT_API_NS, the macro is expanded as follows:
|
||||
|
||||
In the case MSGPACK_DEFAULT_API_NS == v1
|
||||
|
||||
C++11
|
||||
|
||||
```C++
|
||||
inline namespace v1 {
|
||||
// ...
|
||||
}
|
||||
|
||||
namespace v2 {
|
||||
// ...
|
||||
}
|
||||
```
|
||||
|
||||
C++03
|
||||
|
||||
```C++
|
||||
namespace v1{}; using namespace v1; namespace v1 {
|
||||
// ...
|
||||
}
|
||||
|
||||
namespace v2 {
|
||||
// ...
|
||||
}
|
||||
```
|
||||
Reference in New Issue
Block a user