gpt4 book ai didi

c++ - "Conversion"从类型到相同类型导致错误

转载 作者:可可西里 更新时间:2023-11-01 18:29:16 29 4
gpt4 key购买 nike

我有一个模板函数,其中枚举类型转换为它的底层类型,工作正常,但我写了一个重载,它应该接受一个整数并返回它自己,它给我一个错误,指出 int 不是枚举类型。在我的模板中,这应该已经被过滤掉了。怎么了?

模板代码如下:

  template <typename TT>
static constexpr auto get_value(TT t)
-> typename std::enable_if<!std::is_enum<TT>::value, TT>::type
{
return t;
}

template <typename TT>
static constexpr auto get_value(TT t)
-> typename std::enable_if<std::is_enum<TT>::value, typename std::underlying_type<TT>::type>::type
{
return (typename std::underlying_type<TT>::type)t;
}

Demo

最佳答案

std::underlying_type<TT>::type正在评估 std::enable_if尽管std::is_enum<TT>::valuefalse作为false不是错误。由于正在评估非枚举类型,因此它会导致错误。如果我们将 SFINAE 移动到模板参数中,我们可以获得所需的重载并仍然返回正确的类型。

template <typename TT, typename std::enable_if<!std::is_enum<TT>::value, TT>::type* = nullptr>
static constexpr auto get_value(TT t) -> TT
{
return t;
}

template <typename TT, typename std::enable_if<std::is_enum<TT>::value>::type* = nullptr>
static constexpr auto get_value(TT t) -> typename std::underlying_type<TT>::type
{
return (typename std::underlying_type<TT>::type)t;
}

你可以看到它在这个 Live Example 中工作

关于c++ - "Conversion"从类型到相同类型导致错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32460481/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com