不可推导上下文中的模板参数推导问题
在此代码片段中,我们在尝试使用测试函数时遇到错误与 TMap
struct TMap { typedef std::map<T, T> Type; }; template<typename T> T test(typename TMap<T>::Type &tmap_) { return 0.0; } int main() { TMap<double>::Type tmap; tmap[1.1] = 5.2; double d = test(tmap); // Error }
该错误源于编译器无法从函数的参数 tmap 推导出 T 模板参数。出现这种情况是因为我们处于不可推导的上下文中,无法从函数调用的参数中推断出模板参数。
在基于模板的编程中,在某些情况下编译器可以自动从函数调用参数中推导出模板参数。这称为模板参数推导。但是,在这种情况下,编译器无法根据 tmap_ 推导 T,因为它是 std::map
如果我们将 TMap 专门化为特定的 T 类型,则编译器将无法确定要应用哪个专门化,因为 std::map
要解决这个问题,我们可以在调用测试函数时显式指定 T 模板参数:
double d = test<double>(tmap);
通过指定 double 作为模板参数,编译器可以正确推导 tmap_ 的类型并得出其与 TMap
以上是为什么在不可推导的上下文中,模板参数推导会因'std::map”而失败?的详细内容。更多信息请关注PHP中文网其他相关文章!