隐式类型转换和模板推导
在 C 语言中,模板参数推导是一种允许根据类型参数自动推断出类型参数的机制。函数参数。然而,模板推导中的隐式类型转换是有限制的。
考虑下面的代码片段:
<code class="cpp">#include<iostream> using namespace std; template<typename Dtype> class Scalar{ public: Scalar(Dtype v) : value_(v){} private: Dtype value_; }; template<typename Dtype> void func(int a, Scalar<Dtype> b){ cout << "ok" <<endl; } int main(){ int a = 1; func(a, 2); // error: no matching function for call to ‘func(int&, int)’ return 0; }
这里,目标是使用整数调用 func() 模板函数a 和隐式转换的 Scalar 理解错误 编译器无法执行模板参数推导,因为: 解决方案选项 要解决此问题,可以采取多种方法: 在调用方显式转换: 推导指南(C 17 ): 显式模板实例化(仅当标量 结论 C 中的模板参数推导是一种强大的机制,但在处理用户定义的转换时它有局限性。通过利用所讨论的解决方案,开发人员可以确保使用预期的类型参数调用模板函数。 以上是为什么模板参数推导中隐式类型转换失败?的详细内容。更多信息请关注PHP中文网其他相关文章!
在调用方手动转换参数:<code class="cpp">func(a, Scalar<int>{2});</code>
为 Scalar 定义推导指南,并调用 func() 为:<code class="cpp">func(a, Scalar{2});</code>
显式实例化所需类型参数的 func() 模板:<code class="cpp">func<int>(a, 2); </code>