c++ - 检查宏参数是允许的参数之一吗?
问题描述
我想完成类似以下的事情:
#define FOO(bar, ...) \
static_assert(bar == "foo" || bar == "bazz", "Invalid value for bar") \
...
换句话说,我想在编译时检查给宏的值是否是允许的值之一。与可变长度的字符串进行比较时,进行编译时字符串比较的最简洁方法是什么?
解决方案
您可以使用字符串视图。
#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
from "foo"
。std::string_view
具有用于与字符串进行比较的重载==
运算符。这些重载的运算符constexpr
意味着它们可以在编译时进行评估。
推荐阅读
- visual-studio-2010 - 如果我发布了对我的 nuget 包的更新但我没有更改版本号,Visual Studio 如何处理它?
- jenkins - Jenkins Pipeline 在使用 catchError 后获取当前阶段状态
- javascript - 确保文本的双引号被关闭
- java - 我是否正确使用了 clp-java
- windows - 一键在两个浏览器中打开两个网站?
- java - 如何从我的数组列表中返回最近加入的成员?
- c - 为什么 printf 不只打印 ini 字符串?
- java - java.time: 比较两个 Instants - 获取两者之间的小时数、分钟数、秒数、年数、月数
- python-3.x - 如何从 txt 文件中追加值?Python3
- java - 无法在 vs 代码中加载注释处理器工厂