将其唯一参数扩展为其组件字符的宏

时间:2015-11-09 20:12:40

标签: c++ macros c-preprocessor

是否可以在C / C ++预处理器中编写宏,将其单个参数扩展为由

组成的组件字符?

例如

EXPAND( abcd )

将扩展为

'a', 'b', 'c', 'd'

其他例子是

EXPAND( 1 )
'1'
EXPAND( 12 )
'1', '2'
EXPAND( func_name )
'f', 'u', 'n', 'c', '_', 'n', 'a', 'm', 'e'

修改

目的是将字符序列作为参数传递给模板,如下面的

template<char...  args>
struct  Struct {
    ... 
};

而不是编码繁琐的

Struct<'a', 'b', 'c'>

一个人就是

Struct<EXPAND( abc )>

理想情况下,如果可以编码

,那将是最好的
Struct<"abc">

但字符串文字不会自动转换为char ...序列。

1 个答案:

答案 0 :(得分:3)

没有。 C预处理器不提供此功能。

根据您的使用情况,字符串可能是等效的(空字节除外),因此stringifying也可以正常工作。

您可以查看m4,这是K&amp; R的更先进的预处理器。也许它提供了你需要的功能。