typename之前的模板值

  • 本文关键字:typename c++ templates
  • 更新时间 :
  • 英文 :


我有以下简化的示例代码,其中我试图弄清楚给定的值是否是其类型的枚举的最大值。

enum class MyEnum : unsigned char {
VALUE,
OTHER_VALUE,
_LAST
};
template<typename T, T _L>
bool is_not_last(T value) {
return value < _L;
}
int main()
{
is_not_last<MyEnum, MyEnum::_LAST>(MyEnum::OTHER_VALUE);
return 0;
}

如何格式化模板,以便在不首先指定类型的情况下调用is_not_last

期望结果:is_not_last<MyEnum::_LAST>(MyEnum::OTHER_VALUE);

以下声明无效:

template<T _L>
bool is_not_last(T value); // Doesn't have typename specified
template<typename T _L>
bool is_not_last(T value); // Invalid syntax

我觉得编译器应该能够从MyEnum::_LAST中推导出类型,但我一直没能弄清楚。

非常感谢。

由于C++17,您可以执行

template <auto L>
bool is_not_last(decltype(L) value) {
return value < L;
}

演示

相关内容

  • 没有找到相关文章

最新更新