学习loki库代码 以提高自己的编程水平和能力:)
学习的方法就是一个文件一个文件看 很笨 但是很有效。
从 其去Ref属性的那个类开始
下面是改造后的代码:
template <class T> class RefToValue { public: RefToValue(T& _ref) : ref(_ref) {} RefToValue(const RefToValue& rhs) : ref(rhs.ref) {} operator T& () const { return ref; } private: RefToValue(); RefToValue& operator=(const RefToValue&); T& ref; }; template <class T> inline RefToValue<T> RemoveRef(T& t) { return RefToValue<T>(t); }
可以发现其remove ref属性的办法就是偷梁换柱
再看其中 一段代码
是关于变量类型的
template <int v> struct IntType { enum { value = v }; }; template <typename T> struct DefType { typedef T type; }; //条件选择typedef template <bool flag, typename T, typename U> struct Select { typedef T type; }; template <typename T, typename U> struct Select<false, T, U> { typedef U type; }; //类型检测 template <typename T, typename U> struct IsSameType { enum { value = false }; }; template <typename T> struct IsSameType<T,T> { enum { value = true }; };
这些很容易理解 但是在那里使用 这确是个问题