如何使在调试模式下使用的std :: array初始化在发布模型中被忽略?

时间:2018-10-15 20:27:33

标签: c++ macros stdarray

我有一个名为DEVLOGGERDEVLOGARRAYMSG
DEVLOGGER负责调用单例函数,该函数记录所传递的消息。

DEVLOGARRAYMSG调用一个单例函数,该函数接收一个std::array并创建一条消息。然后,此消息将传递到DEVLOGGER进行记录。

我拥有这些 macros 的原因是因为日志记录仅在调试模式下发生。在发布模式下编译源时,将忽略它们。

#if _DEBUG
#undef DEVLOGGER
#define DEVLOGGER(message)   {            \
      DevLogger::Get().Log(message);}
#undef DEVLOGARRAYMSG
#define DEVLOGARRAYMSG(arr) {                  \
      DEVLOGGER(DevLogger::Get().CreateReelPosMsg(arr));}

#else
#undef DEVLOGGER
#define DEVLOGGER
#undef DEVLOGARRAYMSG
#define DEVLOGARRAYMSG
#endif /*_DEBUG*/

但是,这是我的问题。 考虑这个例子,

 std::array<int, (size_t)REEL_MAX> arr1 = { 1,2,3,4,5};
 DEVLOGARRAYMSG(arr1);

当我在发布模式下运行它时,即使编译期间编译器忽略了DEVLOGARRAYMSG调用,也会创建std数组。

我也许可以使用#if#endif卫兵;

#if _DEBUG
     std::array<int, (size_t)REEL_MAX> arr1 = { 1,2,3,4,5};
     DEVLOGARRAYMSG(arr1)
#endif

但是我并不是很热衷于这种方法,因为在整个开发过程中 #if #endif 警卫总是会被意外放错,遗忘/删除

如果我可以做类似的事情,

DEVLOGARRAYMSG({1,2,3,4,5});

这本来很好,但据我所知这是无效的。 我想知道你们如何处理此类问题

0 个答案:

没有答案