cppnow2012 Michael Caisse Introduction to Modern C++ Techniques

这个讲的是一些小组件,部分在AA的书中介绍过

Functor , RAII, Concepts 这些老生常谈不说了

Policy Class

作者列举了AA书中的NullPointer的例子,其实这个Policy Class更像type traits中的tag dispatch手法。或者说,Concept约束。没啥好讲的

CRTP

静多态

写了个cloneable

template <typename Derived>
struct cloneable{
  Derived* clone() const{
  return new Derived(static_cast<Derived const&>(*this));
  }
};
struct bar : clonealbe<bar>{...};

还有一个经典的例子是enable_shared_from_this, 作为一个观测者(weak_ptr),需要shared的时候抛出去shared_ptr

template <class T>
class enable_shared_from_this{
mutable weak_ptr<T> weak_this_;
public:
    shared_ptr<T> shared_from_this(){
        shared_ptr<T> p(weak_this_);
        return p;
    }
    ...
};

总之这是公共接口静多态实现的一个方法,可以把子类的this拿过来霍霍,比如

template<class Derived>
struct enable_profit{
    float profit(){
        Derived const & d = static_cast<Derived const &>(*this);
        return 42*(d.output)/d.input;
    }
};
struct department : enable_profit<department>}{
    int output;
    int input;
};

Type Traits 没啥好讲的

Tag Dispatching or SFINAE

1556623095110

这个典型就是enable_if

看完感觉就是在复习。

ref