【发布时间】:2019-08-22 02:05:20
【问题描述】:
我想这样定义:
#define log(x) \
#if (x) \
cout << "\n" << x \
#else \
cout \
例子:
log() << abc
~
cout << abc
和
log(name) << abc
~
cout << "\n" << name << abc
这里的问题类似于C preprocessor macro specialisation based on an argument
我想使用 define,因为实际上,我使用 cout 是因为人们可以很容易地理解我的意图。
我在做 Qt 并且需要使用 QLoggingCategory 记录日志
QLoggingCategory category("MyNameSpace");
当需要日志时,我需要使用语法
qCDebug(category) << something_need_log
这里,qCDebug(category) 就像我的问题中的 cout。
【问题讨论】:
-
抱歉,宏不能这样工作,这不是它们的用途。使用一个非常简单的模板函数很容易做到这一点。
-
你为什么想要使用宏?它们往往比替代方案造成更多的问题。 (我的意思是它们会引起问题,而替代品通常不会。)
-
宏、旧式强制转换、大多数隐式转换等都是 C++ 拥有的东西,只是因为弃用它们只会破坏很多代码,但在新代码中应该避免使用它们。