首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >从预处理器令牌创建字符串数组

从预处理器令牌创建字符串数组
EN

Stack Overflow用户
提问于 2016-01-15 07:19:38
回答 1查看 1.2K关注 0票数 2

我有一个标记列表,我想从它创建一个enum (琐碎的)和一个字符串数组(稍后用于创建字符串到enum的映射)。以下是我的尝试:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#define TOKEN_LIST  CUBE , SPHERE , CIRCLE
#define CREATE_ARRAY_OF_STRINGS( ... )  const char* token[] = { __VA_ARGS__ };  

CREATE_ARRAY_OF_STRINGS( TOKEN_LIST )
// enum SHAPE_TYPE{ TOKEN_LIST }; // easy

int main(int argc, char *argv[])
{
    return 1;
}

问题是,当我使用TOKEN_LIST标志编译时,没有像下面所示的那样对-E进行字符串化:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const char* token[] = { CUBE , SPHERE , CIRCLE };

int main(int argc, char *argv[])
{
    return 1;
}

const char* token[] = { CUBE , SPHERE , CIRCLE };应该是const char* token[] = { "CUBE" , "SPHERE" , "CIRCLE" };的地方

还有其他方法可以用C++03来实现这一点吗?也许是升压处理器?

EN

回答 1

Stack Overflow用户

发布于 2016-01-15 07:45:00

如果您愿意稍微更改一下TOKEN_LIST的格式,那么您可以很容易地使用Boost.Preprocessor完成这一任务。

下面是一个使用Boost.Preprocessor序列而不是逗号分隔的列表的示例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#define GENERATE_STRING(maZ, maIdx, maTokens) \
  BOOST_PP_STRINGIZE(BOOST_PP_SEQ_ELEM(maIdx, maTokens))

#define GENERATE_STRINGS(maTokens) \
  BOOST_PP_ENUM(BOOST_PP_SEQ_SIZE(maTokens), GENERATE_STRING, maTokens)

#define TOKEN_LIST (CUBE)(SPHERE)(CIRCLE)

const char* token[] = { GENERATE_STRINGS(TOKEN_LIST) }

enum ShapeType {
  BOOST_PP_SEQ_ENUM(TOKEN_LIST)
};

由于您似乎可以访问...__VA_ARGS__ (这不是C++03特性),您也应该能够使用Boost.Preprocessor元组(括号中包含逗号分隔的列表);由于支持各种宏,Boost.Preprocessor能够隐式地确定元组大小。但是,我没有这方面的经验,所以我不能提供代码示例。

maZ参数是Boost.Preprocessor重复宏的实现特性。有三种:z(由枚举样式函数使用)、d(由时间样式函数使用)和r(由for-样式函数使用)。它只在嵌套这些结构时才有用,因为它允许更快的预处理。如果GENERATE_STRING本身正在调用枚举函数,那么在预处理器上使用BOOST_PP_ENUM_ ## maZ将比仅使用BOOST_PP_ENUM进行嵌套调用更容易(但后者也能工作,只要您不超过编译器的预处理限制)。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34814276

复制
相关文章
Power Pivot智能日期运用——当前初始日期/当前结束日期
(六) 当前初始日期 1. OPENINGBALANCEMONTH/ OPENINGBALANCEQUARTER/ OPENINGBALANCEYEAR A) 语法 OpeningBalanceMonth (<expression>, <dates> [, <filter>]) OpeningBalanceQuarter (<expression>, <dates> [, <filter>]) OpeningBalanceYear (<expression>, <dates> [, <filter>] [,
逍遥之
2020/03/24
2.7K0
Power Pivot智能日期运用——当前初始日期/当前结束日期
【HTML】HTML 表单 ⑤ ( form 表单域 )
从 input 表单 , textarea 文本域 , select 下拉菜单 中收集了用户信息 , 需要通过
韩曙亮
2023/03/30
4K0
【HTML】HTML 表单 ⑤ ( form 表单域 )
【HTML5】HTML5 新增 input 表单 ( 邮箱输入表单 | 网址输入表单 | 日期输入表单 | 时间输入表单 | 电话输入表单 | 搜索栏输入表单 | 颜色选择器输入表单 )
一、HTML5 新增 input 表单 ---- HTML5 新增 input 表单 : 邮箱输入表单 : 必须输入邮箱 , 如果输入格式错误 , 提交时会在对话框中报错 ; <input type="email" /> URL 输入表单 : 只能输入网址 , 格式错误会在对话框中报错 ; <input type="url" /> 日期输入表单 : 右侧的下拉菜单选择日期 ; 如果在手机中打开 , 会弹出手机中自带的日期选择对话框 ; <input type="date" /> 时间输入表
韩曙亮
2023/04/24
3.4K0
【HTML5】HTML5 新增 input 表单 ( 邮箱输入表单 | 网址输入表单 | 日期输入表单 | 时间输入表单 | 电话输入表单 | 搜索栏输入表单 | 颜色选择器输入表单 )
HTML 表单
HTML 表单 <form method="post" action=" "> <label for=" " >用户名</label> <input type="text" name=" " id=" " value=" "> </input> </form> input 类型 text password 单选框 radio name 属性一致 复选框 checkbox name 属性一致 下拉列表框 <select> <option></option> </select> 下拉列表框 多选 <sele
康怀帅
2018/02/28
3K0
HTML表单
创建一个表单 HTML中表单的创建使用<form>标签(双标签) <form method="post" action="index.html"></form> method="post" 指的是表单提交方式,常用值 get | post get:速度较快,但不安全。传输的文本较少;提交的内容会在提交表单之后显示在浏览器的地址栏;不适合密码之类的传输; post:速度慢,但是安全。与get相反。适合用于注册表单、登录表单之类的传输。 action="index.html"指的是表单提交成功后要跳转的页面。
全栈开发日记
2022/05/12
2.5K0
HTML(表单)
get:速度较快,但不安全。传输的文本较少;提交的内容会在提交表单之后显示在浏览器的地址栏;不适合密码之类的传输;
全栈开发日记
2022/05/12
2.5K0
HTML表单
这个元素正式定义了一个表单,就像<div>和<p>标签,它是一个容器元素,但它也支持一些特定的属性来配置表单的行为方式。它的所有属性都是可选的,但实践中最好至少要设置action属性和method属性。
HammerZe
2022/03/25
4K0
HTML表单
Html 表单
一、表单语法<form method="post" action="result.html"><p> 名字:<input name="name" type="text" > </p><p> 密码:<input name="pass" type="password" > </p><p><input type="submit" name="Button" value="提交"/><input type="reset" name="Reset" value="重填“/> </p></form>二、表单元
久绊A
2023/03/24
3.7K0
html表单
表单标签共有4个:<input>、<textarea>、<select>和<option>。其中<select>和<option>是配合使用的。
Qwe7
2022/05/17
2.5K0
html表单提交_html表单标签有哪些
name属性 设置表单元素的名称,该名称是提交数据时的参数名 value属性 设置表单元素的值,该值是提交数据时参数名所对应的值
全栈程序员站长
2022/11/09
2.8K0
html表单提交
1、只能为input、textarea、select三类类型的标签。只有这些标签用户才可能修改值,<label>、<p>、<font>等标签仅供显示用,没有提交到服务器的必要。当input=submit的时候,只有被点击的按钮的value才会被提交;
tandaxia
2018/09/27
5.4K0
日期控件选择条件控制只能选择当前日期之前或当前日期之后
需求: 在使用日期控件选择日期的时候,只能选择当前日期之前或当前日期之后的日期,如下图
全栈程序员站长
2022/07/12
3.5K0
日期控件选择条件控制只能选择当前日期之前或当前日期之后
如何创建HTML表单?html表单代码怎么写[通俗易懂]
html表单代码是什么?如何创建HTML表单?这些对于新手会感到陌生,下面我们为你总结一下html表单代码怎么写?以及html表单的创建?
全栈程序员站长
2022/09/22
6.6K0
java获取当前日期是周几_根据日期获取当前周
/** * 获取当前日期是星期几<br> * * @param dt * @return 当前日期是星期几 */ public static String getWeekOfDate(Date dt) { String[] weekDays = {“星期日”, “星期一”, “星期二”, “星期三”, “星期四”, “星期五”, “星期六”}; Calendar cal = Calendar.getInstance(); cal.setTime(dt);
全栈程序员站长
2022/10/29
5.4K0
html表单制作
用到的表单元素:文本区域(textarea)、列表框(select)、文本输入框(input type=text)、单选输入框(input type=radio)、复选输入框(input type=checkbox)、重置按钮(input type=”reset” value=”重置”)、提交按钮(input type=”submit” value=”提交”)、密码域(input type=”password” name=”text” value=” “)
全栈程序员站长
2022/07/04
3.4K0
html表单制作
HTML表单(下)
<datalist>标签是用来给list属性提供列表数据的,<datalist>类似于一个数据组,option标签用于给这个数据组填充数据。然后在组件的list属性里指定<datalist>标签的id属性值即可实现下拉框的效果,示例:
端碗吹水
2020/09/23
2.6K0
HTML表单(下)
html form表单
表单用于搜集不同类型的用户输入,表单由不同类型的标签组成,相关标签及属性用法如下:
Devops海洋的渔夫
2019/05/31
2.9K0
HTML表单__表单元素属性
看完“HTML表单__表单元素”那一节的同学会发现,同是input标签,type属性值不一样的时候,input类型完全不一样。type就是input的一个属性,除type之外,还有很多属性,接下来我们开始了解表单元素属性都有哪些?
呆呆
2021/09/28
3.1K0
HTML表单__表单元素属性
看完“HTML表单__表单元素”那一节的同学会发现,同是input标签,type属性值不一样的时候,input类型完全不一样。type就是input的一个属性,除type之外,还有很多属性,接下来我们开始了解表单元素属性都有哪些?
呆呆
2021/11/25
2.9K0
HTML_表单
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>表单测试</title> </head> <body> <!--常见的input标签 文本输入框:type = "text" 密码输入框:type = "passwo
bye
2020/11/24
1.6K0

相似问题

如何通过html表单建立多个模型关联?

20

用当前日期+ 14天填充HTML5输入字段

20

用HTML表单覆盖HTML页面

23

HTML/PHP在html日期输入中显示当前日期

59

用CakePHP显示当前日期

25
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文