大佬教程收集整理的这篇文章主要介绍了如何专门针对所有参考类型的类c 03,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我需要一个模板类
template <typename T> class A { private: T m_member; public: A(T _member); //... MORE STUFF void foo(T param); };
我需要:
1)如果A被编译成一个值类型(包括指针,它们本身是通过值传递的):
然后我需要A看起来像这样(完全像上面)
class A { private: T m_member; public: A(T _member); //... MORE STUFF void foo(T param); };
2)如果使用引用类型(例如int&)编译A:
然后我需要A看起来像这样:
class A{ private: T& m_member; public: A(T& _member); //... MORE STUFF void foo(T param);//still the same T,not T& };
如果我知道A只收到ints,那么我将能够使用专业化.
但A的用户可以使用任何类型:
main.cpp中
A<int> a1;//1st version A<int&> a2;//2nd version A<B> a3;//1st version A<B&> a4;//2nd version A<C*> a5;//1st version
相反,您可以手动告诉编译器它正在处理引用类型,使用相同的专业技巧
template<typename T,bool isReference> class A { }; template<typename T> class A<T,false>{ private: T m_member; public: A(T _member); //... MORE STUFF void foo(T param); } ///////////////////////// template<typename T> class A<T,true>{ private: T& m_member; public: A(T& _member); //... MORE STUFF void foo(T param); }
如果你想提取一些类似的行为,并避免这个解决方案导致的代码重用,你可以很容易地将该行为提取到基类< T>,并且
template<typename T,bool isReference> class A : public BaseClass<T>{ }
等等.
用法就是
main.cpp中
A<int,false> a1;//1st version A<int&,true> a2;//2nd version A<B,false> a3;//1st version A<B&,true> a4;//2nd version A<C*,false> a5;//1st version,as pointers are value types
以上是大佬教程为你收集整理的如何专门针对所有参考类型的类c 03全部内容,希望文章能够帮你解决如何专门针对所有参考类型的类c 03所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。