
Andrew James a écrit :
I myself have also implemented a class that has these features within a "traited" framework (explanation to follow). The challenge I have seen, that I'm not clear if it is expressed here, is what if the type whose name you want to dump is also dependent on some template parameter that a frameword user is in charge of? [...] These things being said, I realize this is specific to my framework but it illustrates some issues a boost supported solution could provide. We should be able to debug types like std::vector< SomeTypeTheDebugLibraryIsCluelessAbout > w/o requiring the user do a similar amount of work to writing the facility him/herself.
I'm not sure if I understood the problem but currently my identify<> class can take care of user defined type or user_defined tempalte by using a simple register macro. I also have a on going list of pre-registered type for STD and parts of BOOST. Here is a small example : #include <boost/identify/identify.hpp> #include <boost/identify/support/std.hpp> // Some user template classes template<class A1,class A2,class A3,class A4,size_t A5> struct foo {}; template<class A1,class A2> struct chu{}; // some class struct coin {}; BOOST_IDENTIFY_REGISTER_TYPE_ID(coin) BOOST_IDENTIFY_REGISTER_CUSTOM_TEMPLATE_TYPE_ID( (class)(class)(class)(class)(size_t), foo) BOOST_IDENTIFY_REGISTER_TEMPLATE_TYPE_ID(chu,2) template<class T> struct Test { static inline void Do() { cout << boost::identify<T>::Name() << endl; } }; int main() { Test<char>::Do(); Test<coin>::Do(); Test<chu<float,coin> >::Do(); Test< std::vector< chu<void,void*>& > >::Do(); Test<foo<float,long*,volatile double,coin,3> >::Do(); } The results are : char coin chu<float, coin> std::vector< chu<void,void*>& foo< float, signed long*, volatile double, coin, 3 > the identify.hpp grants the main identify class ans supports for basic types (POD, pointer, reference, cv qualified types, function types, function pointers and array mostly) while the support/std.hpp provides pre-registered identify overload for STD types. The macro BOOST_IDENTIFY_REGISTER_TYPE_ID declares a new user types to be displayed. BOOST_IDENTIFY_REGISTER_TEMPLATE_TYPE_ID does the same for template class with less than 5 tempalte parameters which are all of tpye class. BOOST_IDENTIFY_REGISTER_CUSTOM_TEMPLATE_TYPE_ID allows registering tempalte class with more than 5 parameters and with integralk parameters by specifying a BOOST_PP_SEQ of the arguments. The burden is no greater for me than registering a type for BOOST_TYPEOF and is fairly acceptable. Not sure if other cases are needed. My main concern is being able to display non-instanciated template class, eg: identify<std::vector>::Name() displaying std::vector but this may need another class (like incomplete_identify<> maybe). -- Joel FALCOU Research Engineer @ Institut d'Electronique Fondamentale Université PARIS SUD XI France