[C con Clase] Uso de typedefs y opinión de ushort

Davidson, Steven srd4121 en njit.edu
Mar Abr 21 23:20:07 CEST 2015


Hola Sergi,

2015-04-18 9:46 GMT-04:00 Sergi <sespinas6 en gmail.com>:

> Buenas a todos,
>
> Tengo un problema con los typedefs, y es que no los uso porque creo que
> hago mal. Dentro de una clase, los usaría como en el ejemplo:
> [code]
> private:
>   template <typename T = unsigned char>
>   using Element = std::pair<T, int>;1
>   using Vowels = std::vector<Element<>>;
>   using Diphthongs = std::vector<Element<std::array<unsigned char, 2>>>;
>   // etc
> [/code]
> Pero tengo la impresión de que, a pesar de ser alias privados (que sólo se
> usan dentro de la clase), estoy "escondiendo" información. Porque, aunque
> así escriba menos y el código sea más legible, Vowels es std::vector, con
> las mismas funciones miembro y demás. ¿No hace, entonces, el código más
> complicado de entender?
>
>
Personalmente, no veo un grave problema por esconder esta información.
Además, a veces viene bien, porque en una revisión futura del código,
puedes decidir modificar la definición de 'Vowels' para que ahora sea la
clase 'std::list', 'std::deque', o lo que quieras. Al usar una clase
contenedora estándar, varios nombres de las funciones miembro son iguales,
por lo que no sales perdiendo. Claro que siempre puedes decidir crear otra
clase que sirva de "envoltura" para ofrecer la misma interfaz que 'vector'.
Por otra parte, puedes ofrecer estas clases como parámetros de la
plantilla; por ejemplo,

template< typename T = unsigned char, typename E = std::pair<T,int>,
typename V = std::vector<E>, typename D = std::vector<E<std::array<T, 2>>> >
using Element = E;
...

¡Muchas gracias!
>
> PD:
> ¿Qué opináis de "ushort" en vez de "unsigned short int", "uchar" en vez de
> "unsigned char"...?
>

No es algo malo, pero personalmente no me gusta, porque no se agrega
ninguna ventaja, excepto usar un nombre más corto. Sería más interesante si
el nombre ofrece alguna información acerca del concepto que quieres
plasmar; por ejemplo,

using cantidad_entera = unsigned short int;
using byte = unsigned char;

O incluso,

using int8 = char;
using int16 = short int;
using int32 = int;
using int64 = long long int;

Ahora tenemos una mejor idea de los requisitos de los tipos que podemos
usar. Por cierto, estos nombres ya existen en C++11.

Using y typedef pueden ser lo mismo.
> Ejemplo:
> [code]
> typedef unsigned short int ushort; [/code]
> [code]
> using ushort = unsigned short int [/code]
>
>
Cierto, aunque la "nueva" sintaxis de 'using' acepta plantillas y sus
parámetros, por lo que se trata de una extensión al funcionamiento de
'typedef'.


Hasta pronto,

Steven
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20150421/a7f66d52/attachment.html>


Más información sobre la lista de distribución Cconclase