问题描述
这不是严格意义上的C ++语言问题。
有没有办法用
$ b $形成一个标识符的字符串b预处理器有一些操作吗?
即用标识符ID来表示我使用#ID。
多数民众赞成好,但如果我想要怎么办?稍微改变它。
就好像我有一个标识符myID,我想生成一个字符串
MYID(或任何其他形式)来自它。
我也有兴趣知道是否可以使用模板完成,
即myID -myID(字符串,使用预处理器)-MYID(使用
模板)。
我对编译时解决方案感兴趣,运行时间很简单。
谢谢
abir basak
读取##令牌粘贴操作符。
#define MY(id)my ## id
MY(Word)//生成myWord
MY(Goodness)//生成myGoodness
这是真的,但我有一个标识符myID,而不是id。所以我不能这样做。
澄清这一点,说我有一个枚举
enum MyEnum {
meType1,meType2
};
i希望从中输入几个字符串TYPE1,TYPE2,其中输入
是meType1,meType2而不是其他任何东西(将使用
来完成一些seq预处理器构造来自boost)。
所以说,我想静态应用meType1的一些构造
使用预处理器或使用模板生成TYPE1。
谢谢
abir
你不能,真的。你有两个选择:要么自己写一个小的
解析器(例如忽略除enum'之外的所有东西),并使用
来生成字符串,或者写一个小的
的程序从一些简单的
格式输入生成枚举和字符串。我已经完成了第一次,并没有那么难。
在你的情况下,第二只只有10行GNU
awk。 (标准awk没有toupper功能,所以你也必须实现它。)
-
James Kanze(GABI软件)电子邮件:ja ********* @ gmail.com
Conseils eninformatiqueorientéeobjet/
Beratung in objektorientierter Datenverarbeitung
9placeSémard,78210 St.-Cyr-l''coco,France,+ 33(0)1 30 23 00 34
Hi,
This is not strictly a C++ language question.
Is there any way to form a string from an identifier with the
preprocessor with some operations ?
i.e to say to make a string from an identifier ID i use #ID.
Thats ok, but what if i want to alter it a little.
like if i have an identifier myID , and i want to generate an string
MYID (or any other form) from it.
I am also interested to know if it can be done using template also ,
i.e myID -myID (string, using preprocessor) -MYID (using
template) .
I am interested in a compile time solution, runtime one is trivial.
thanks
abir basak
read up on the ## token pasting operator.
#define MY(id) my ## id
MY(Word) // generates myWord
MY(Goodness) // generates myGoodness
read up on the ## token pasting operator.
#define MY(id) my ## id
MY(Word) // generates myWord
MY(Goodness) // generates myGoodness
Thats true, but i have an identifier myID, and not id. So i can''t do
that.
to clarify the point, say i have an enum
enum MyEnum{
meType1,meType2
};
i want to make a few strings from it as TYPE1, TYPE2 , where the input
is meType1, meType2 and NOT anything else (which will be done using
some seq preprocessor constructs from boost) .
So to say, i want to apply some construct statically of meType1 to
generate TYPE1 either using preprocessor or using template.
thanks
abir
You can''t, really. You have two choices: either write a small
parser yourself (e.g. ignoring everything but enum''s), and use
it to generate the strings, or write a small program which
generates both the enum and the strings from some simply
formatted input. I''ve done the first, and it''s not that hard.
And in your case, the second would only be about 10 lines of GNU
awk. (Standard awk doesn''t have a toupper function, so you''d
have to implement that as well.)
--
James Kanze (GABI Software) email:ja*********@gmail.com
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l''école, France, +33 (0)1 30 23 00 34
这篇关于预处理器:如何操作字符串的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!