我想完成以下任务:
#define FOO(bar, ...) \
static_assert(bar == "foo" || bar == "bazz", "Invalid value for bar") \
...
换句话说,我想在编译时检查给宏的值是允许的值之一。与可变长度的字符串进行比较时,进行编译时间字符串比较的最干净方法是什么?
答案 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
,这意味着可以在编译时对其进行求值。