Boost logo

Boost :

From: Joel FALCOU (joel.falcou_at_[hidden])
Date: 2008-06-06 16:21:55

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 {};

(class)(class)(class)(class)(size_t), foo)

template<class T> struct Test
   static inline void Do()
     cout << boost::identify<T>::Name() << endl;

int main()
   Test<chu<float,coin> >::Do();
   Test< std::vector< chu<void,void*>& > >::Do();
   Test<foo<float,long*,volatile double,coin,3> >::Do();

The results are :

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
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).

Research Engineer @ Institut d'Electronique Fondamentale
Université PARIS SUD XI

Boost list run by bdawes at, gregod at, cpdaniel at, john at