c++ std::enable_if约束变量和问题
c++ std::enable_if constraint variants and problems
只是一个简短的问题,给定一个函数,我想返回enum class
的底层类型:
为什么这个版本可以正常工作
template<typename T>
constexpr inline
typename std::enable_if_t<
std::is_enum<T>::value,
typename std::underlying_type_t<T>
>
enumValue(T p_rVal) noexcept
{
return static_cast<typename std::underlying_type_t<T>>(p_rVal);
}
if (enumValue(myEnumClass) == 0) {}
而这个失败的"没有匹配的重载函数找到" (VS 2015)错误:
template<
typename T,
typename std::enable_if_t<
std::is_enum<T>::value,
typename std::underlying_type_t<T>
>
>
constexpr inline
typename std::underlying_type_t<T>
enumValue(T p_rVal) noexcept
{
return static_cast<typename std::underlying_type_t<T>>(p_rVal);
}
非常感谢你的帮助!
在您的第一个示例中,只有一个template
参数T
,它在函数调用enumValue(myEnumClass)
中是从参数推导出来的。这是std::enable_if_t<>
的正确用法。
在第二个示例中,有两个template
参数,第一个可以再次推导,但第二个不能。这是使用std::enable_if_t<>
的不恰当/错误的方式。
相关文章:
- 如何创建一个CMake变量,除非显式重写,否则使用默认值
- 将成员变量添加到共享库中的类中,不会破坏二进制兼容性吗
- 将数组的地址分配给变量并删除
- 为"adjacent"变量赋值时出现问题
- enum是C++中的宏变量还是整数变量
- 在全局变量中保存类的实例以重新创建类(创建"backup")
- 用C++中的一个变量定义一个常量
- 具有奇怪重复模板模式的派生类中的成员变量已损坏
- 你能重载对象变量名本身返回的内容吗
- 内置函数可查看CPP中的成员变量
- 是否可以初始化不可复制类型的成员变量(或基类)
- 尝试通过多个向量访问变量时,向量下标超出范围
- 试图让变量检查数组中的某些内容
- Cpp-Tuple使用带有变量的get
- 将包含C样式数组的对象初始化为成员变量(C++)
- 当vector是tje全局变量时,c++中vector的内存管理
- 不生成单独约束的变量的 Gurobi 影子价格
- 变量的cplex约束函数
- 模板约束是否可用于变量模板
- c++ std::enable_if约束变量和问题