CamelCase到预处理器宏中的snake_case

时间:2016-09-26 19:21:32

标签: c++ regex macros c-preprocessor

以下代码段(虽然在Java中)从CamelCase转换为snake_case。 我应该怎么做才能在C / C ++宏中(即 #define 行)?

    String regex = "([a-z])([A-Z]+)";
    String replacement = "$1_$2";
    System.out.println("CamelCaseToSomethingElse".replaceAll(regex, replacement).toLowerCase());

2 个答案:

答案 0 :(得分:1)

在构建过程中进行这种转换。

编写一个转换程序,给定一个字符串输入文件,它将生成一个C / C ++头文件,其中包含每个所需转换的定义。

因此,给定一个带有条目的输入文件:

TOKEN="Hello World"

创建一个转换,输出包含以下内容的头文件:

#define R_TOKEN="Hello World" // Regular text
#define U_TOKEN="HELLO_WORLD" // Upper case token transform
#define L_TOKEN="hello_world" // Lower case token transform
#define C_TOKEN="HelloWorld"  // Capital CamelCase token transform
#define K_TOKEN="helloWorld"  // Lowercase CamelCase token transform

等等......

将转换添加到构建规则中,结果标头会依赖于需要它的源文件(google makedepends)。

(在make中无关紧要......)

答案 1 :(得分:0)

  

我应该怎么做才能在C / C ++宏中做到这一点(即在#define中   线)?

你必须非常好地学习C ++,在C ++社区中获得足够的分量并成为C ++标准化委员会的成员。然后,您可以为C ++标准提出声音增强,这将允许将其实现为宏。但是,不希望这比c ++ 2x早发生。因此,修改您的要求可能是解决您手头问题的更好方法。