我可以在::?中使用#define指令吗?它为什么不起作用?

时间:2014-10-23 16:19:36

标签: c++

我写了一个B类作为A的子类来扩展它。现在我想改变所有的

 a = A::create(); 

 a = (A*)B::create(); 

一切正常。但是我不想在创建A对象的任何地方手动更改代码。 所以我尝试了以下#define指令

#define A::create (A*)B::create

但它根本不起作用。 我不知道问题是什么。有帮助吗?我可以在::?中使用#define指令吗?为什么它不起作用?

2 个答案:

答案 0 :(得分:6)

问题很简单,你不能在宏名中使用这些字符;它们是不被允许的,因为标准说它们不是。

宏名称只能包含字母(大写和小写),下划线和数字。 (此外,它们不能以数字开头,并且以下划线后跟大写字母开头的宏和标识符名称保留供编译器和标准库使用。)

如果您使用其他字符(如冒号和parens),那么您只是没有有效的宏名称。

进一步阅读:

答案 1 :(得分:1)

宏名称必须是单个标识符。 A::create是一个标识符,后跟冒号码标记,后跟另一个标识符。所以它无法识别你的语法。

除此之外,你所做的是一个非常非常糟糕的主意。请使用支持正则表达式的搜索和替换。