
template <class T>struct pointer{ operator pointer<const T>() const;};voID f(pointer<const float>);template <typename U>voID tf(pointer<const U>);voID g(){ pointer<float> ptr; f(ptr); tf(ptr);} 当我用gcc 4.3.3编译代码时,我收到一条消息(aaa.cc:17:错误:没有匹配函数用于调用’tf(指针< float>&)’),表明编译器调用了’operator pointer< const T>‘对于非模板化函数f(),但没有用于模板化函数tf().为什么并且有没有解决方法没有使用const和非const版本重载tf()?
在此先感谢您的帮助.
解决方法 原因是您在模板推导期间没有获得隐式类型转换,它永远不会到达那一点.考虑:
template <typename T>struct foo {};template <typename U>voID bar(foo<U>){}foo<int> f;bar(f); 对于对bar的调用,编译器可以推断出U是一个int,并实例化该函数.但是,请考虑:
template <typename U>voID bar(foo<const U>){} // note ^^^^foo<int> f;bar(f); 没有U,编译器可以推断出foo的类型与参数的类型匹配.因此,模板实例化失败.转换没有机会发生.
总结以上是内存溢出为你收集整理的为什么不隐式调用模板化函数的运算符转换? (C )全部内容,希望文章能够帮你解决为什么不隐式调用模板化函数的运算符转换? (C )所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)