大佬教程收集整理的这篇文章主要介绍了c – 更喜欢转换运算符转换构造函数,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
class A { public: A() : x_(0),y_(0) {} A(int x,int y) : x_(x),y_(y) {} template<class T> A(const T &rhs) : x_(rhs.x_),y_(rhs.y_) { } int x_,y_; }; class B { public: B() {} operator A() const { return A(c[0],c[1]); } int c[2]; }; void f() { B b; (A)b; // << here the error appears,compiler tries to use // template<class T> A(const T &rhs) }
为什么编译器使用A的构造函数?如何使用B的转换操作符到A?
我使用MSVS2010编译器.它给我这些错误:
main.cpp(9): error C2039: 'x_' : is not a member of 'B' main.cpp(17) : see declaration of 'B' main.cpp(28) : see reference to function template instantiation 'A::A<B>(const T &)' being compiled with [ T=B ] main.cpp(9): error C2039: 'y_' : is not a member of 'B' main.cpp(17) : see declaration of 'B'
UPD:
好吧,隐含的转换,纳瓦兹说真的有效.让我们让它变得更加复杂,怎样使下面的代码工作?
void f() { std::vector<B> b_vector(4); std::vector<A> a_vector( b_vector.begin(),b_vector.end() ); }
UPD:A是第三方lib中的类,我不能编辑代码,所以我不能删除A的转换构造函数.
UPD:我发现的最简单的解决方案是定义B的转换构造函数的专业化.它可以在第三方lib之外完成:
template<> A::A( const B &rhs ) : x_(rhs.c[0]),y_(rhs.c[1]) {}
以上是大佬教程为你收集整理的c – 更喜欢转换运算符转换构造函数全部内容,希望文章能够帮你解决c – 更喜欢转换运算符转换构造函数所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。