`
stephen80
  • 浏览: 100891 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

trait and policy

    博客分类:
  • c++
 
阅读更多
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);
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics