检查宏参数是否是允许的参数之一?

时间:2019-11-21 08:52:10

标签: c++ c++17

我想完成以下任务:

#define FOO(bar, ...) \
  static_assert(bar == "foo" || bar == "bazz", "Invalid value for bar") \
  ...

换句话说,我想在编译时检查给宏的值是允许的值之一。与可变长度的字符串进行比较时,进行编译时间字符串比较的最干净方法是什么?

1 个答案:

答案 0 :(得分:3)

您可以使用字符串视图。

#include <string_view>

using namespace std::string_view_literals;

// Note the sv after the string
#define FOO(bar, ...) \
  static_assert(bar == "foo"sv || bar == "bazz"sv, "Invalid value for bar") \
  ...

表达式"foo"sv调用文字运算符。它从std::string_view构造一个"foo"std::string_view重载了==运算符以与字符串进行比较。这些重载运算符为constexpr,这意味着可以在编译时对其进行求值。

相关问题