优雅地禁用警告

时间:2014-03-19 06:46:58

标签: c++ macros

我有一个导出的类,它使用仅标题结构作为成员变量。

#include "SomeStruct.h"

class API_CLASS SomeClass
{
public:
// ...
private:
#pragma warning( push )
#pragma warning( disable: 4251 )
    SomeStruct _active;
#pragma warning( pop )
};

我收到警告4251,因为结构未导出。该结构是外部代码的一部分,而不是当前范围的一部分。

我想让这段代码更具可读性,因为这是我将分发的标题。 理想情况下,我希望课程阅读

#include "SomeStruct.h"

class API_CLASS SomeClass
{
public:
// ...
private:
DISABLE_WARNING_BEGIN(4251)
    SomeStruct _active;
DISABLE_WARNING_END
};

禁用多个警告可能需要做更多工作,但如果可以做到,那么很好但不是必需的。宏应该只为WIN32环境生成代码。我曾尝试编写宏,但包含'#'超出了我的范围。

2 个答案:

答案 0 :(得分:0)

我可以忍受这个。这比我现在的要好。

#include "SomeStruct.h"

class API_CLASS SomeClass
{
public:
// ...
private:
#pragma warning(suppress: 4251)
    SomeStruct _active;
};

感谢Heinirichj

答案 1 :(得分:0)

要将#pragma添加到MACRO中,您可以使用:

  • __pragma与MSVC
  • _Pragma与gcc

有关详细信息,请参阅Pragma in define macro