我有以下功能:
template <size_t TSize>
consteval size_t indexOf(SomeEnum someEnum,
const std::array<SomeEnum, TSize> &arr) {
for (size_t i = 0; i < TSize; ++i) {
if (arr[i] == someEnum) {
return i;
}
}
// How to fail here?
return SOME_DEFAULT_WRONG_VALUE;
}
函数应该失败,而不是返回默认值,但我不能抛出异常或调用assert
。我可以在对函数的每次调用中添加static_assert
(如果使用宏,就不那么可怕了),但我更喜欢在函数中工作的解决方案。在这样的场景中有没有方法触发编译失败?
您应该避免使用索引,而是使用std::find
,即现在的constexpr
。但是,如果不能这样做,那么只需返回tsize
;它应该像结束迭代器一样工作。