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
++