【问题标题】:How to elegently exclude a code block in run time如何在运行时优雅地排除代码块
【发布时间】:2019-07-26 09:11:25
【问题描述】:

我为了在编译时从模型中排除一段代码,我使用预处理器:

#ifdef setting1
do something
#endif //setting1

有时我打算在编译期间保留一段代码,但在运行时将其排除。有没有比if 声明更好的方法来实现这个目的?

【问题讨论】:

  • define "better" :if 是否不足以满足您的需求?我的意思是,在可读性(字面意思是自我记录)和功能方面,它是一种随心所欲的机制,那么您有什么理由不想使用它吗?
  • “更好”究竟是什么意思? if 声明非常清晰。
  • @JalilNourisa 为什么不是普通的if?什么是“正常的if”?
  • 你为什么要保留一段在运行时不执行的代码,这取决于编译时定义的东西?这听起来像XY problem
  • 仍在努力理解目标。也许如果您的帖子包含一个您使用if 的示例,并说明您为什么要寻找替代方案?运行时条件执行是if 的字面意思,所以我很好奇你在哪里以及如何认为它有问题。我也想知道如果这不是我们所说的,那么“正常如果”是什么。

标签: c++ preprocessor


【解决方案1】:

要保持“原始”,您可以将 #ifdef 替换为类似


bool const theflag = false;

if constexpr (theflag) {
    dosomething
}

这样dosomething 仍将被语法检查。

【讨论】:

  • 还有 const bool theFlag = false;
  • 我可以做这种检查来检查平台吗? (即 Windows 或 Linux)
  • @Hoodi - boost 对各种编译器品牌/版本和平台组合进行了非常全面的检查,您可以使用这些检查,也可以直接剪切/粘贴到您的代码中,请参阅stackoverflow.com/questions/46090534/…
  • theflag 也应该是 constexpr
猜你喜欢
  • 1970-01-01
  • 2018-09-03
  • 2017-10-25
  • 2013-02-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多