C++11 要定义具有相同前缀的宏列表吗

C++11 要定义具有相同前缀的宏列表吗,c++11,C++11,我有一堆宏要用相同的前缀定义,我不想一个接一个地定义它们 比如,我想定义如下: 静态constexpr str_1=“str_1”; 静态constexpr str_2=“str_2”; .... 静态constexpr str_100=“str_100”; 我试过: #定义DECLARE_STR(变量前缀、val前缀、cur、max)do{\ 如果((cur)”符号。

我有一堆宏要用相同的前缀定义,我不想一个接一个地定义它们

比如,我想定义如下:

静态constexpr str_1=“str_1”; 静态constexpr str_2=“str_2”; .... 静态constexpr str_100=“str_100”; 我试过:

#定义DECLARE_STR(变量前缀、val前缀、cur、max)do{\
如果((cur)<(max)){\
静态constexpr变量_前缀##cur=val_前缀#cur\
声明字符串(变量前缀、值前缀、cur+1、max)\
}而(0)
但出现错误:错误:声明说明符后应为成员名或“;”


我有正确的实现方法吗?

您的代码有两个问题

首先,
do
/
while(0)
构造有助于确保宏扩展为单个语句。您要生成的是全局命名空间中的变量定义,这些语句不适用于它们:只需删除
do
/
while(0)
如果
也不能对声明变量做任何事情,它只能在运行时对值进行分支。但是在任何情况下

另一个问题是,你试图递归调用宏。C++预处理器不能执行这样的递归:宏不能在它自己的扩展中扩展。围绕这个问题需要大量的样板来生成迭代序列,直到达到极限。幸运的是(?),Boost.预处理器已完成样板文件:

#include <boost/preprocessor/repeat.hpp>
#include <boost/preprocessor/tuple/elem.hpp>
#include <boost/preprocessor/stringize.hpp>

#define DECLARE_ONE_STR(z, n, data) \
    static constexpr BOOST_PP_CAT(BOOST_PP_TUPLE_ELEM(0, data), n) = BOOST_PP_TUPLE_ELEM(1, data) BOOST_PP_STRINGIZE(n);

#define DECLARE_STR(variable_prefix, val_prefix, max) \
    BOOST_PP_REPEAT(max, DECLARE_ONE_STR, (variable_prefix, val_prefix))
#包括
#包括
#包括
#定义DECLARE_ONE_STR(z,n,data)\
静态constexpr BOOST_PP_CAT(BOOST_PP_TUPLE_ELEM(0,数据),n)=BOOST_PP_TUPLE_ELEM(1,数据)BOOST_PP_STRINGIZE(n);
#定义DECLARE_STR(变量前缀、值前缀、最大值)\
BOOST_PP_REPEAT(max,DECLARE_ONE_STR,(变量前缀,val前缀))

你知道向量吗?也请考虑你是否在描述XY问题。嗨,你可以强调错误信息使用“>”符号。