簡體   English   中英

類型名前的模板值

[英]Template value before typename

我有以下簡化的示例代碼,我試圖找出給定的值是否是它的類型枚舉的最大值。

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;
}

演示

您可以將模板中的第二個參數設為默認參數。

template<typename T, T last = T::_LAST>
bool is_not_last(T value){ return value < last; }

int main()
{
  is_not_last(MyEnum::OTHER_VALUE); // No Error
}

演示

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM