循环使用宏

Ste*_*art 1 c++ macros

我需要做一个循环,我将这个简单的反射示例转换为:

std::string mystring[3] = {{"mystring[0]"},{"mystring[1]"},{"mystring[2]"}};
Run Code Online (Sandbox Code Playgroud)

为更长的阵列更加可管理的形式.解决方案听起来像我应该使用带循环的宏或递归.但是,宏不支持循环或递归!

如何创建一个宏来随意处理这个问题?

#define NAME_OBJ(type, name, size)
Run Code Online (Sandbox Code Playgroud)

Que*_*tin 5

尝试使用Boost.如果失败,请尝试使用更多Boost.

#include <boost/preprocessor/repeat.hpp>
#include <boost/preprocessor/comma_if.hpp>
#include <boost/preprocessor/stringize.hpp>

#define DETAIL_NAME_OBJ_ELEM(z, n, name) \
    BOOST_PP_COMMA_IF(n) { BOOST_PP_STRINGIZE(name) "[" BOOST_PP_STRINGIZE(n) "]" }

#define NAME_OBJ(type, name, size) \
    type name[size] = { BOOST_PP_REPEAT(size, DETAIL_NAME_OBJ_ELEM, name) }
Run Code Online (Sandbox Code Playgroud)

然后这个:

NAME_OBJ(std::string, mystring, 3);
Run Code Online (Sandbox Code Playgroud)

...扩展到这个:

std::string mystring[3] = {
    { "mystring" "[" "0" "]" },
    { "mystring" "[" "1" "]" },
    { "mystring" "[" "2" "]" }
};
Run Code Online (Sandbox Code Playgroud)

...然后在编译之前自动合并相邻的字符串文字.

在Coliru上看到它

  • 匿名downvoter,你表明你无法表达你的观点.当有足够的人这样做时,它反映在网站上很差.请考虑理性讨论. (2认同)