# include "ace/Version.h"
// Make name 的實作方式:
# define ACE_MAKE_VERSIONED_NAMESPACE_NAME_IMPL(MAJOR,MINOR,BETA) ACE_ ## MAJOR ## _ ## MINOR ## _ ## BETA
// 轉呼叫Make name的實作
# define ACE_MAKE_VERSIONED_NAMESPACE_NAME(MAJOR,MINOR,BETA) ACE_MAKE_VERSIONED_NAMESPACE_NAME_IMPL(MAJOR,MINOR,BETA)
// 將用 Version.h 中的 ACE_MAJOR_VERSION, ACE_MINOR_VERSION 與 ACE_BETA_VERSION macro 傳給上一個 macro
# define ACE_VERSIONED_NAMESPACE_NAME ACE_MAKE_VERSIONED_NAMESPACE_NAME(ACE_MAJOR_VERSION,ACE_MINOR_VERSION,ACE_BETA_VERSION)
# endif /* !ACE_VERSIONED_NAMESPACE_NAME */
// 下面兩個 macro 將上面做出來的 ACE_VERSIONED_NAMESPACE 跟 C++ 關鍵字 namespace 與 { } 結合起來
# define ACE_BEGIN_VERSIONED_NAMESPACE_DECL namespace ACE_VERSIONED_NAMESPACE_NAME {
# define ACE_END_VERSIONED_NAMESPACE_DECL } \
using namespace ACE_VERSIONED_NAMESPACE_NAME;
假設 Version.h 裡面定義如下
#define ACE_MAJOR_VERSION 5
#define ACE_MINOR_VERSION 5
#define ACE_BETA_VERSION 2
把 ACE_BEGIN_VERSIONED_NAMESPACE_DECL 與 ACE_END_VERSIONED_NAMESPACE_DECL 展開就是
namespace ACE_5_5_2 {
// code ...
}
using namespace ACE_5_5_2; |