首页 > 解决方案 > Resharper C++ 和 Plog 记录器

问题描述

我在我的项目中使用 Plog 进行日志记录。我也使用 resharper c++。

有几个宏用于记录,使其不那么冗长。其中一个宏总是被标记为 Resharper 的问题,但我不知道为什么。

宏是 LOGD,它扩展为

            if (!plog::get<0>() || !plog::get<0>()- 
              >checkSeverity(plog::debug)) {;} else (*plog::get<0>()) += 
              plog::Record(plog::debug, __FUNCTION__, 151, "", 
              __if_exists(this) { this } __if_not_exists(this) { 0 }) << 
              "Message";

警告指向“this”的使用,因为它需要一个标识符。

它正在调用的方法具有以下签名:

Record(Severity severity, const char* func, size_t line, const char* file, const void* object)
        : m_severity(severity), m_tid(util::gettid()), m_object(object), m_line(line), m_func(func), m_file(file)

有没有人有这方面的经验并且知道如何修改宏所以它不会抱怨?

标签: c++thisresharper

解决方案


我已提交RSCPP-22423,我们将尝试在 2018.2 EAP 版本之一中解决此问题。在此之前,您可以PLOG_GET_THIS像这样重新定义 ReSharper C++ 的宏:

#include <plog/Log.h>
#if defined(__RESHARPER__)
#define PLOG_GET_THIS() reinterpret_cast<void*>(0)
#endif

或者类似地更新的原始定义PLOG_GET_THIS(它已经检查了类似的__INTELLISENSE__宏以确定是否__if_exists可以使用)。


推荐阅读