宏可以返回一个对象吗?
#define macro1 {obj1}
Run Code Online (Sandbox Code Playgroud)
由于宏是文本替换,我可以像macro1.function1()一样使用宏吗?
谢谢.
宏永远不会返回任何东西.宏返回代码的文本表示,该代码将被粘贴到编译之前使用它的程序所在的位置.
阅读有关C预处理器的信息.
所以:
#define macro1 {obj1}
int main() {
macro1
}
Run Code Online (Sandbox Code Playgroud)
......将被编译,就像你写的一样
int main() {
{obj1}
}
Run Code Online (Sandbox Code Playgroud)
它只是文本替换,可以选择带参数.
如果您正在使用GCC,您可以使用该cpp工具查看预处理后程序的外观:
# cpp myprog.cpp myprog.cpp_out
Run Code Online (Sandbox Code Playgroud)
通常将宏与对象混合是不好的做法,而是使用模板.
宏在对象方面的一种已知用法是使用它们来访问单例(但这通常不是一个好主意):
#define LOGGER Logger::getLogger()
...
LOGGER->log("blah");
Run Code Online (Sandbox Code Playgroud)
您还可以使用预处理器在编译时选择要使用的对象:
#ifdef DEBUG
# define LOGGER DebugLogger
#else
# define LOGGER Logger
#end
// assuming that DebugLogger and Logger are objects not types
LOGGER.log("blah");
Run Code Online (Sandbox Code Playgroud)
...但前面提到的模板做得更好.