Updated version 1.1.x api versioning.

Takatoshi Kondo
2015-04-03 14:07:00 +09:00
parent 0034696841
commit 87c0efb8d0
+72
@@ -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 {
// ...
}
```