为什么 C 不能在不可推导的上下文中推导出 T?
在给定的代码片段中,模板结构体 TMap 定义为嵌套类型 Type ,表示使用模板参数 T 的 std::map 的特化。但是,编译器无法在函数中推导 T test.
不可推导的上下文
发生错误的原因是代码使用类型为 typename TMap
类型推断中的歧义
在不可推导的上下文中,编译器是无法推断模板参数,因为参数的类型不能唯一确定 T。例如,考虑以下内容场景:
template <> struct TMap<SomeType> { typedef std::map<double, double> Type; }; template <> struct TMap<OtherType> { typedef std::map<double, double> Type; };
在这种情况下,TMap
后果
不可推导上下文的限制具有重要含义:
缓解
为了缓解这一限制,可以采用模板模板参数或 C 20 的 std::is_same_v 等技术来手动推导模板参数或提供明确的模板参数列表。
以上是为什么 C 不能在不可推导的上下文中推导模板参数?的详细内容。更多信息请关注PHP中文网其他相关文章!