[英]C++ nested namespaces with a macro
這個問題是基於
我想效仿
namespace foo::bar::baz {
在C ++ 17到來之前使用宏。
我在思考:
#define BOOST_PP_VARIADICS
#include <boost/preprocessor/cat.hpp>
#include <boost/preprocessor/seq/fold_left.hpp>
#include <boost/preprocessor/variadic/to_seq.hpp>
#define OP(s, state, x) BOOST_PP_CAT(state, BOOST_PP_CAT( { namespace, x )) {
#define NS(...) namespace BOOST_PP_SEQ_FOLD_LEFT(OP, BOOST_PP_SEQ_HEAD(BOOST_PP_VARIADIC_TO_SEQ(__VA_ARGS__)), BOOST_PP_SEQ_TAIL(BOOST_PP_VARIADIC_TO_SEQ(__VA_ARGS__)))
NS(foo, bar, baz)
基於第二個鏈接,但這給了我:
namespace foo { namespacebar { namespacebaz {
如何在namespace
和標識符之間添加空格?
編輯:
如果你可以創建一個宏,以便ns(foo::bar::baz)
擴展到namespace foo { namespace bar { namespace baz {
,甚至更好。
你可以用BOOST_PP_SEQ_FOR_EACH
更簡單地做到這一點:
#define BOOST_PP_VARIADICS
#include <boost/preprocessor/variadic/to_seq.hpp>
#include <boost/preprocessor/seq/for_each.hpp>
#define OP(s, state, x) namespace x {
#define NS(...) BOOST_PP_SEQ_FOR_EACH(OP, , BOOST_PP_VARIADIC_TO_SEQ(__VA_ARGS__))
NS(foo, bar, baz)
這擴展到
namespace foo { namespace bar { namespace baz {
這可以做得更簡單:
#define OP(s, state, x) state namespace x {
#define NS(...) BOOST_PP_SEQ_FOLD_LEFT(OP, , BOOST_PP_VARIADIC_TO_SEQ(__VA_ARGS__))
您不必單獨處理第一個命名空間,這樣您就不必在NS
宏本身中編寫namespace
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.