C++ 为c+创建宏+;流动
我正在写一个以std流为参数的宏。比如说 文件.hC++ 为c+创建宏+;流动,c++,macros,C++,Macros,我正在写一个以std流为参数的宏。比如说 文件.h int enable = 0; #define MYLOG(hanlde) \ if (enable==0) { LOG1(handle) } \ else { LOG2(handle) } file.cpp MYLOG(handle) << "Test log msg"; MyLoad(句柄)作为编写,MyLoG宏的版本显然不会扩展到有效的C++代码。 以下替代方案有更好的机会按预期工作;然而,这也取决于LO
int enable = 0;
#define MYLOG(hanlde) \
if (enable==0) { LOG1(handle) } \
else { LOG2(handle) }
file.cpp
MYLOG(handle) << "Test log msg";
<代码> MyLoad(句柄)作为编写,MyLoG宏的版本显然不会扩展到有效的C++代码。 以下替代方案有更好的机会按预期工作;然而,这也取决于
LOG1
和LOG2
的实际情况
#define MYLOG(handle) (enable == 0 ? LOG1(handle):LOG2(handle))
编写的MyLoG宏版本显然不会扩展到有效的C++代码。 以下替代方案有更好的机会按预期工作;然而,这也取决于
LOG1
和LOG2
的实际情况
#define MYLOG(handle) (enable == 0 ? LOG1(handle):LOG2(handle))
如图所示,宏将不起作用。您需要使用以下内容:
#define MYLOG(hanlde) \
(enable == 0 ? LOG1(handle) : LOG2(handle))
话虽如此,您可以使用同样有效的内联
函数
inline std::ostream& MYLOG(handle_type handle)
{
return (enable == 0 ? LOG1(handle) : LOG2(handle))
}
在现代编译器中,简单的内联函数与宏一样高效。因为其他原因,它们也更好。请参阅。所示的宏将不起作用。您需要使用以下内容:
#define MYLOG(hanlde) \
(enable == 0 ? LOG1(handle) : LOG2(handle))
话虽如此,您可以使用同样有效的内联
函数
inline std::ostream& MYLOG(handle_type handle)
{
return (enable == 0 ? LOG1(handle) : LOG2(handle))
}
在现代编译器中,简单的内联函数与宏一样高效。因为其他原因,它们也更好。请参阅。宏对您的预期用途没有多大作用。它也可能是一个函数。@RSahu你是对的,我的期望是可能的函数。但是我不想做函数调用,因为它是从很多地方调用的。在现代编译器中,简单的内联函数和宏一样高效。因为其他原因,它们也更好。请参阅。宏对您的预期用途没有多大作用。它也可能是一个函数。@RSahu你是对的,我的期望是可能的函数。但是我不想做函数调用,因为它是从很多地方调用的。在现代编译器中,简单的内联函数和宏一样高效。因为其他原因,它们也更好。看见