首页 > 后端开发 > C++ > 为什么编译器不能推导出 `test(TMap::Type)` 中的 `T`?

为什么编译器不能推导出 `test(TMap::Type)` 中的 `T`?

DDD
发布: 2024-12-17 02:26:25
原创
307 人浏览过

Why Can't the Compiler Deduce `T` in `test(TMap::Type)`?

无法从模板推导 T::Type

在提供的代码中,尝试推导模板时发生错误测试函数的参数 T。要理解其中的原因,深入研究“不可推导上下文”的概念至关重要。

在 TMap 的模板定义中,您将一个名为 Type 的别名定义为 std::map 。 。当尝试从函数调用 test(tmap) 推导 T 时,编译器会遇到不可推导的上下文。

考虑以下场景:如果 TMap 对 SomeType 有专门化,其中 Type 定义为 std::map< ;double, double>,编译器如何仅根据 TMap::Type 是 std::map

此外,如果 OtherType 存在另一个 TMap 特化,其中 Type 又是 std::map,情况就会变得更加模糊。鉴于 TMap::Type 和 TMap::Type 的已知等价性,编译器无法区分 SomeType 和 OtherType。

请务必记住,编译器无法对这种关系做出假设模板定义中使用的类型参数之间。因此,在这种不可推导的上下文中,编译器无法自动推导模板参数 T。

以上是为什么编译器不能推导出 `test(TMap::Type)` 中的 `T`?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板