C++ 为c+创建宏+;流动

C++ 为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

我正在写一个以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++代码。

以下替代方案有更好的机会按预期工作;然而,这也取决于
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你是对的,我的期望是可能的函数。但是我不想做函数调用,因为它是从很多地方调用的。在现代编译器中,简单的内联函数和宏一样高效。因为其他原因,它们也更好。看见