首页 > 解决方案 > 不知何故告诉编译器“不要处理代码行”

问题描述

我正在尝试创建一个用于调试日志记录的宏。这是一个额外的简化版本:

#if defined _DEBUG
#define LOG std::cout
#else
#define LOG IGNORETHISLINEOFCODE
#endif

/* ... */

LOG << "Here's some debug code";

我一直在想我可以告诉编译器忽略这行以“LOG”开头的代码的方法。我个人不是在寻找替代方法,例如#define LOG( ... ) (void)0. 这是我尝试过的:

有任何想法吗?就像我之前说的,我不想要任何替代方案,例如将所有日志代码用#if defined _DEBUG

标签: c++

解决方案


如果您的 C++ 版本处理if constexpr我已经开始喜欢您所要求的内容。

#include <iostream>

template <bool Log>
struct LOGGER {
    template <typename T>
    LOGGER& operator<<(T const &t) {
        if constexpr (Log)
            std::cout << t;
        return *this;
    }
};

LOGGER<false> LOG;

int main (int argc, char const* argv[])
{
    LOG << "A log statement." << '\n';
    return 0;
}

推荐阅读