首页 >后端开发 >C++ >为什么从成员类型推断时模板类型推导失败?

为什么从成员类型推断时模板类型推导失败?

Barbara Streisand
Barbara Streisand原创
2024-12-19 09:24:10191浏览

Why Does Template Type Deduction Fail When Inferring from a Member Type?

模板类型推断中的推导失败

当尝试从类型成员推导模板参数时,确保上下文可推导至关重要。在给定的代码中,当编译器尝试从类型名 TMap::Type 推导模板参数 T 时,测试函数内会发生错误。

此失败源于“不可推导上下文”的概念”。在这种情况下,模板类型 TMap 的成员类型“Type”与模板参数 T 没有内在关系。

考虑 TMap 的假设特化:

template <>
struct TMap<SomeType> {
    typedef std::map<double, double> Type;
};

如果编译器必须从 TMap::Type 推导 T,则会遇到歧义。 TMap::Type 的值为 std::map。但是,不能保证 TMap 中的 T 一定是 TMap 中的 T。与特化中的 SomeType 相同。

进一步特化 TMap:

template <>
struct TMap<OtherType> {
    typedef std::map<double, double> Type;
};

情况变得更糟,现在如下:

  • TMap ;::类型 = std::map
  • TMap::Type = std::map

鉴于这种歧义,编译器无法确定 T 是 SomeType 还是 OtherType。它也无法确定可能的选择数量或识别这些选择。

因此,在模板成员类型与模板参数没有直接关系的上下文中,模板参数推导失败,并且编译器会引发错误。

以上是为什么从成员类型推断时模板类型推导失败?的详细内容。更多信息请关注PHP中文网其他相关文章!

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