首页  >  文章  >  后端开发  >  为什么我在模板参数中遇到'enable_if_t”的重新定义错误?

为什么我在模板参数中遇到'enable_if_t”的重新定义错误?

Linda Hamilton
Linda Hamilton原创
2024-11-19 03:45:03862浏览

Why Am I Getting a Redefinition Error with `enable_if_t` in Template Arguments?

模板参数中的enable_if_t重定义错误

在C中,使用enable_if_t的enable_if的新语法在将代码移植到新语法。以下代码演示了该问题:

template<typename T,
         typename std::enable_if<std::is_same<int, T>::value>::type* = nullptr>
void f() { }

template<typename T,
         typename = std::enable_if_t<std::is_same<int, T>::value>>
void g() { }

使用 GCC (5.2) 编译会产生错误:

“错误:重新定义 'template void g()' “

原因错误

出现该错误是因为两个模板函数f和g具有相同的模板类型void()。尽管它们的第二个模板参数具有不同的默认值,但它们仍然具有相同的类型。

解决方案

要解决此问题,请更新语法以使用 std:: enable_if_t 具有不同的第二个参数类型。例如:

template<typename T,
         std::enable_if_t<std::is_same<int, T>::value, int>* = nullptr>
void f() { }

template<typename T,
         std::enable_if_t<std::is_same<double, T>::value, double>* = nullptr>
void g() { }

此修改可确保两个模板函数具有不同的模板类型,并消除重定义错误。

以上是为什么我在模板参数中遇到'enable_if_t”的重新定义错误?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn