Trait : type as first class value, great.
template <typename T>
struct AverageTrait
{
typedef T TAverage;
};
template<>
struct AverageTrait<int>
{
typedef float TAverage;
};
template <typename T>
typename AverageTrait<T>::TAverage
Average(T arg0, T arg1)
{
return (static_cast<typename AverageTrait<T>::TAverage>(arg0 + arg1))/2;
}
Average<int>(10,11)
-----------------------------------------------------------------
template <class T,
class Checker,
class ThreadModel>
struct SmartPtr: public Checker, ThreadModel{
T* operator->()
{
Check(p);
Lock(p);
return p;
}
explicit SmartPtr(T* aP)
{
p = aP;
}
~SmartPtr()
{
delete p;
}
T* p;
};
struct NullChecker
{
template< typename T>
void Check(T* p)
{
}
};
struct SingleThread
{
template< typename T>
void Lock(T* t)
{
}
};
SmartPtr<int, NullChecker ,SingleThread> sp(new int);
template <typename T>
struct AverageTrait
{
typedef T TAverage;
};
template<>
struct AverageTrait<int>
{
typedef float TAverage;
};
template <typename T>
typename AverageTrait<T>::TAverage
Average(T arg0, T arg1)
{
return (static_cast<typename AverageTrait<T>::TAverage>(arg0 + arg1))/2;
}
Average<int>(10,11)
-----------------------------------------------------------------
template <class T,
class Checker,
class ThreadModel>
struct SmartPtr: public Checker, ThreadModel{
T* operator->()
{
Check(p);
Lock(p);
return p;
}
explicit SmartPtr(T* aP)
{
p = aP;
}
~SmartPtr()
{
delete p;
}
T* p;
};
struct NullChecker
{
template< typename T>
void Check(T* p)
{
}
};
struct SingleThread
{
template< typename T>
void Lock(T* t)
{
}
};
SmartPtr<int, NullChecker ,SingleThread> sp(new int);
本文介绍了一个使用C++模板元编程实现的智能指针类SmartPtr,该类通过组合NullChecker和SingleThread类来提供安全检查和锁机制。此外,还展示了一个AverageTrait模板特化示例,用于计算不同类型参数的平均值。
1万+

被折叠的 条评论
为什么被折叠?



