c++ - 将其唯一参数扩展为其组成字符的宏

标签 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">

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

最佳答案

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

根据您的用例,字符串可能是等效的(空字节除外),因此 stringifying也可能有效。

你可以看看 m4 ,K&R 的更高级预处理器。也许它提供了您需要的功能。

关于c++ - 将其唯一参数扩展为其组成字符的宏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33617410/

相关文章:

compilation - proc宏能否确定调用编译的目标?

c++ - #include 和复制粘贴有什么区别?

c - iOS - 在 plCrashReporter 中使用 PRIx64 打印内存地址

c++ - 向可变参数宏添加默认参数

c++ - 预编译头文件?我们真的需要它们吗

c++ - 如何在 Ubuntu13.10 上安装 clang-3.5 而不删除 gcc-4.8

c++ - C++11 中的高阶函数

c++ - 使用 boost::shared_ptr 时有哪些潜在危险?

c++ - 错误打印不正确。这个逻辑流程是否正确? C++

macros - 在 Rust 宏中调用具有不同数量参数的函数