template <class T> struct DT { char unused[sizeof (T)] ; std::function<void (T &)> create = std::bind (&T::T ,std::placeholders::_1) ; std::function<void (T &)> destroy = std::bind (&T::~T ,std::placeholders::_1) ; inline DT () { create (reinterpret_cast <T &> (*this)) ; } inline ~DT () { destroy (reinterpret_cast <T &> (*this)) ; } } ;
怎么完成这样的功能,并且DT<int>和DT<DT<int>>都可以
解决方案
30
template <class T> struct DT { char unused[sizeof(T)]; std::function<void(T &)> create = [](T & p) { new (&p) T(); }; std::function<void(T &)> destroy = [](T & p) { p.~T(); }; inline DT() { create(reinterpret_cast <T &> (*this)); } inline ~DT() { destroy(reinterpret_cast <T &> (*this)); } };
注意不能取构造函数或析构函数的地址
10
++