Boost.TTI を使ってみる
Boost.TTI が利用できるよさげなネタがあったので書いてみました。
[ソース]
#include <boost/tti/has_member_function.hpp> BOOST_TTI_HAS_MEMBER_FUNCTION(close) // => has_member_function_close struct custom_deleter{ template<typename T> void operator ()(T* p, typename std::enable_if< has_member_function_close<void (T::*)()>::value >::type* = 0 ) const{ p->close(); delete p; } template<typename T> void operator ()(T* p, typename std::enable_if< has_member_function_close<void (T::*)(int)>::value >::type* = 0 ) const{ p->close(100); delete p; } }; #include <memory> #include <type_traits> #include <iostream> struct Hoge{ Hoge() {} ~Hoge() {} void close() { std::cout << "Hoge::close" << std::endl; }; }; struct Fuga{ Fuga() {} ~Fuga() {} void close(int i) { std::cout << "Fuga::close" << std::endl; }; }; int main(){ { std::shared_ptr<Hoge> hoge(new Hoge(), custom_deleter()); std::shared_ptr<Fuga> fuga(new Fuga(), custom_deleter()); } return 0; }
[boost]
- ver 1.54.0