[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