我想增加/减少 astd::variant
的替代类型,基本上像这样:
using var_t = std::variant</*...*/>;
var_t var;
var.emplace< (var.index()+1) % std::variant_size<var_t> >(); // "increment" case, wrapping for good measure
这里的问题是,虽然emplace
期望 clang 的错误消息称为“明确指定的参数”,index
但似乎不是constexpr
.
显而易见的替代方案是这样的:
switch(var.index()){
0:
var.emplace<1>();
break;
1:
var.emplace<2>();
break;
// ...
variant_size<var_t>-1:
var.emplace<0>();
}
但这就是我个人所说的“极其丑陋”和“维护背后的巨大痛苦”(特别是因为我必须逐个地维护这些块的两个几乎副本以用于递增和递减)。
有没有更好/“正确”的方式来做到这一点?
如果该信息在任何方面都很重要,我的目标C++20
是.clang
libstdc++