[C con Clase] Templates: No comprendo sintaxis
vicente lozano
vicentelozano en gmail.com
Jue Mar 12 10:36:20 CET 2009
Hola,
Leyendo un poco de codigo me he encontrado con un template que no consigo
entender, a ver si podeis echarme una mano:
<pre>*
<*code>
*template< class* T *>*
*class* MessageMappingOscPacketListener *: public* OscPacketListener*{*
*public:*
*typedef* *void* *(*T*::**function_type*)(const *osc*::*ReceivedMessage*&,
const* IpEndpointName*&);*
*protected:*
* void* RegisterMessageFunction*( const char
**addressPattern*,*function_type f
*)*
* **{*
functions_.insert*( *std::make_pair*(* addressPattern*,* f *) );*
* }*
* *
* virtual void* ProcessMessage*( const* osc*::*ReceivedMessage*&* m, *
const* IpEndpointName*&* remoteEndpoint *)*
*{*
*typename *function_map_type*::*iterator i *=* functions_*.*find*( *
m.AddressPattern*() );*
*if(* i *!=* functions_.end*() )*
*(dynamic_cast<*T**>(this)->*(*i*->*second*))(* m*,*remoteEndpoint
*);*
* }*
*private:*
* struct* cstr_compare*{*
* bool operator()( const char **lhs*, const char **rhs *) const*
* { return *strcmp*(* lhs*,* rhs *) <* 0*; }*
* };*
*typedef *std*::*map*<const char*,* function_type*,*
cstr_compare*>*function_map_type
*;*
function_map_type functions_*;*
*};*
</code>
</pre>
Entiendo que se define una clase MessageMappingOscPacketListener que deriva
de OscPacketListener y que usa una clase generica T.
Define como publico un tipo: function_type que es una operacion de la clase
T que devuelve void y acepta como parametros 2 referencias constantes, (osc*
::*ReceivedMessage* y *IpEndpointName*). (No se como poner esto en UML)
*Define como protegido una funcion *UML* -> #RegisterMessageFunction(char*,
function_type) : void
y otra: *UML *->* #**ProcessMessage( osc::ReceivedMessage& , IpEndpointName&
): void
*Define como privado un struct cstr_compare cuyo unico miembro es una
funcion que sobrecarga el operador () para aceptar dos punteros a char
constantes y devolver un bool: (Porque hace esto? como se usaria ese
struct?)
Y luego define otro tipo que ya no tengo ni idea de que hace.
A ver si podeis echar un poco de luz, gracias.
pd: He intentado formatear el codigo lo mejor posible, si sabeis alguna
manera de formatearlo para facilitar su lectura estaria encantado de usarla.
**
**
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20090312/a6767e99/attachment.html>
Más información sobre la lista de distribución Cconclase