Skip to content

v2_0_cpp_versioning

Takatoshi Kondo edited this page Mar 18, 2016 · 1 revision

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.

#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.

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

inline namespace v1 {
   // ...
}

namespace v2 {
   // ...
}

C++03

namespace v1{}; using namespace v1; namespace v1 {
   // ...
}

namespace v2 {
   // ...
}