Acerca de Llyn
Miembro desde: 01/01/2009
Digamos esto, dado un valor quieres hacer algo. Ejemplo,
enum {
John, Paul, Ringo, George
} quien_fue = Paul;
switch (quien_fue) {
case John: cout << "Fue John." << endl; break;
case Paul: cout << "Fue Paul." << endl; break;
case Ringo: cout << "Fue Ringo." << endl; break;
case George: cout << "Fue George." << endl; break;
};

Un tema corto, en Windows existen varias formas de tener una imagen como la portada de una carpeta, entre ellos están el crear un icono y añadirlo a desktop.ini, usar una opción (algo limitante) en versiones viejas del explorador. Existe una tercera el cual es tener un archivo Folder.jpg y AlbumArtSmall.jpg las cuales son usadas automáticamente por el explorador (y WMP, WMC, etc.) como portada de la carpeta.
El siguiente código (en C# para variar) emplea la tercera opción, se encarga de leer una imagen dada en la línea de comando del programa, crear una vista previa (con un borde añadido) y guardarlo como los archivos respectivos.
Leer mas
En este tema, trataré la especialización de plantillas de manera general.
Antes que todo, recordemos que una plantilla permite aplicar procedimientos comunes con distintos tipos de datos sin tener que reescribir el código. Podemos tener como ejemplo la clase de STL, std::vector<T>. Con la especialización de plantillas, en cambio, se permitir definir procedimientos o estructuras para casos particulares. Tal es el caso de std::vector<bool> en la librería STL que utiliza menos espacio que la clase genérica. Leer mas
Unos 135 días desde mi último post, pero quien los cuenta.
Bien, en vez de explicar el cómo utilizar el portapapeles mediante Win32 (relativamente no tan largo, pero no vale la pena), presentaré la clase newcastle::clipboard, la cual nos permitirá manejar en un programa de C++ operaciones básicas del portapapeles de Windows en tiempo de ejecución sin requerir de mucho código. Para su uso se incluyen dos archivos al proyecto, clipboard.h y clipboard.cpp. El primero declara el objeto clipboard y sus operaciones en el nombre de espacio newcastle, y va a ser el archivo a incluir para el uso de la clase. Leer mas
Bien, un largo tiempo desde mi último tema. Trataré de actualizar los temas anteriores. Ahora, para redimirme un poco hablaré una implementación en C++ de lo que Microsoft denominó mapa de mensajes (tabla de métodos virtuales dinámica). La empresa lo hizo pensando principalmente en el manejo de ventanas, pero se puede aplicar (como la misma compañía hizo) a otras ideas.
Por ahora, describiré el tema pensando en las ventanas de Windows (posiblemente exagerando en este aspecto) pero el objeto es ofrecer una clase independiente del sistema operativo. Observación: el uso del lenguaje en este tema requiere de ciertos conocimientos avanzados. De todos modos se puede aprender un poco. Leer mas
Como lo indiqué al final de la primera parte, aquí tenemos a Bind():
template <class _Class, class _ParamType>
void MessageTarget::Bind(int nMessage, int (_Class::*function)(_ParamType *)) {
union {
int (_Class::* fptr)(_ParamType *);
int (MessageTarget::* vptr)(void *);
} f = { function }; // Ya tenemos al puntero para guardarlo.
MESSAGE t = {
/* nMessage = */ nMessage,
/* nDist = */ 0, // No viene al caso ahora
/* pAddress = */ f.vptr;
};
m_MessageMap.push_back(t); // Añadimos la estructura
};
Tenemos dos números como cadena de caracteres, ambas en la misma base, y nuestro objetivo es sumarlos. Una opción es utilizar la función strtol() para convertir las cadenas a números y entonces sumarlos, y convertir la suma de nuevo a cadena con _ltoa(). Esto funciona siempre y cuando los números no sean ni muy grandes (overflow) ni muy pequeños (underflow). No obstante, tambien se puede usar un procedimiento de pseudo-suma, la cual nos quita esta limitación.
Leer mas
DFS, acrónimo para Depth-First Search, en español Búsqueda en Profundidad, es un algoritmo usado para procesar grafos, una búsqueda tal como lo describe el nombre. La idea es que se toma como prioridad en la búsqueda la profundidad del nodo. Para demostrarlo, el siguiente grafo presenta como contenido de los nodos, el índice en el cual es procesado.
Bien, las siguientes funciones que trabajan con bits pertenecen solo al compilador gcc:
Por lo tanto, si se requiere el uso en otros compiladores puede no encontrarse soporte, en mi caso, por ejemplo, que uso Visual C++, de tal modo que realice la implementación de tales funciones en C++, adjunto le añado una pequeña descripción para aquel que no los conozca:
Leer mas