Flavio Dominguez | 25 Jul 16:41 2016
Picon

[cppba] O.T. Búsqueda Laboral


Somos una Start Up argentina que se encuentra desarrollando soluciones disruptivas de compresión de
imágenes y video en stealth mode con el fin de solucionar los problemas que genera el crecimiento
exponencial de contenido multimedia (Dataggedon) para acceder, trasmitir y almacenar el mismo.

Estamos buscando personas con ganas de ser protagonistas en un proyecto desafiante de la mano de un
referente internacional en la materia:

-	Programador senior con manejo de C++ moderno (11/14) capacitada para diseñar o implementar una
infraestructura de imágen y video. 
-	Programadores Junior con manejo de C++, estudiantes de carreras relacionadas. 
-	Programador Junior con experiencia en Xamarin para programacion mobile en IOS y Android.

Conocimientos de GPU programming (OpenGL, CUDA) son un un muy buen plus.

Cv y consultas a: flavio@...

-- 
--

-- 
¿Eres miembro de "CyC++ Buenos Aires" verdad? Si no lo eres, has recibido este mesaje por error. 
En caso de duda visita "http://groups.google.com/group/cppba"
--- 
Has recibido este mensaje porque estás suscrito al grupo "CyC++ Buenos Aires" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a cppba+unsubscribe <at> googlegroups.com.
Para obtener más opciones, visita https://groups.google.com/d/optout.
RFOG | 25 Jul 11:09 2016
Picon

[cppba] ¿Qué pasa cuando oculto un método de una clase base?

Creo que he encontrado un bug de Visual C++ 2015... o no, porque me surge una duda.

Estoy peleando con código obsoleto y encima estoy eliminando un montón de capas de software que vamos a dejar de usar pero que como tenemos que ir actualizando por partes, deben seguir estando para otros elementos.

Tengo una jerarquía de clases que representan dispositivos físicos, con sus métodos virtuales y demás.

Pero hay métodos que no son virtuales porque se supone que las clases hijas no han de tocar, como por ejemplo algunos setter/getters.

Yo ahora estoy creando mi propia jerarquía de "devices" mucho más limpia y sencilla, no porque la haya hecho yo, sino porque los devices nuevos son mucho más sencillos de manejar.

Para hacer mi jerarquía compatible con la existente, defino una clase que hereda las legacy pero sobreescribo todos los métodos y los redirecciono a mi propia jerarquía.

Los métodos virtuales funcionan bien, pero me he encontrado con que los normales a veces -y eso es lo extraño- a veces no.

Es decir, supongamos que la clase legacy "Devices" tenga un método no virutal llamado IsReady().

Mi clase envoltorio crea un método nuevo IsReady() que oculta el anterior. El código existente llama al objeto base Devices, que es una instancia del mío.

Según entiendo yo, al no ser un método virtual, una llamada a Devices::IsReady() ejecutará el código padre, no mi nuevo método, pero ocurre que una veces Visual C++ llama al sobreescrito y otras al padre... y no le encuentro mucha lógica.

Evidentemente la solución es hacer virtual ese método y se llama al mío, pero lo que me intriga mucho es que VC++ esté llamando al mío cuando el método no es virtual y se llame desde el padre como objeto padre...


--
--
¿Eres miembro de "CyC++ Buenos Aires" verdad? Si no lo eres, has recibido este mesaje por error.
En caso de duda visita "http://groups.google.com/group/cppba"
---
Has recibido este mensaje porque estás suscrito al grupo "CyC++ Buenos Aires" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a cppba+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org.
Para acceder a más opciones, visita https://groups.google.com/d/optout.
Marcos Bracco | 20 Apr 21:17 2016
Picon

copy-and-swap vs copy-and-move


Buenas gente, resulta que tengo una clase con algunos std:::unique_ptr, por lo cual tengo que escribir un copy-constructor especifico (deep-copy).
Los move-constructor y move-assignment pueden ser default, ya que std::unique_ptr se puede mover sin problemas.

La pregunta es sobre la implementación del copy-assignment. La sabiduría tradicional decía que lo mejor era copy-and-swap, pero en este caso me tienta más hacer un copy-and-move. Hay algún problema en esto?

class MyClass {
private:
  std::unique_ptr<...> itemA;
  std::unique_ptr<...> itemB;
public:
  MyClass() = default;
  MyClass(const MyClass& other); // acá va my deep-copy
  MyClass(MyClass&& other) = default;
  MyClass& operator=(MyClass&& other) = default;

  MyClass& operator=(MyClass& other) {
    if(this != &other)
      *this = std::move(MyClass(other));
    return *this;
  }
};


Gracias!
Marcos


--
--
¿Eres miembro de "CyC++ Buenos Aires" verdad? Si no lo eres, has recibido este mesaje por error.
En caso de duda visita "http://groups.google.com/group/cppba"
---
Has recibido este mensaje porque estás suscrito al grupo "CyC++ Buenos Aires" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a cppba+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org.
Para acceder a más opciones, visita https://groups.google.com/d/optout.
dgutson . | 20 Apr 15:40 2016
Picon

Re: [cppba] un poco de ejercitación


El 20/4/2016 10:35, "Nicolás Brailovsky" <nicolasbrailo-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> escribió:
>
> > no usaste el != NULL en la 22.
> Necesito un #include extra para eso. O, más feo todavía, comparar con cero como en la línea 44. Me gusta más la conversión implícita.

Hmmme don't like it pero bué... me gusta ver una expresión buleana donde se espera un bulean.

>
> > Y que el next podría estar en la clase base; más aún, es donde más tiene sentido dejar la parte de lista en la clase base.
> No concuerdo acá. La interfaz sólo describe algo que puede procesar elementos (o aplicar un callback a, o cualquier nombre mejor pensado). Que sea una lista es irrelevante para la clase base. Lo mismo en la clase derivada: no importa qué es lo que hay detrás de next. Mientras acepte un callback está todo bien.

Ok desde ese punto de vista; el mío es re-uso más que la clase base sea una interfaz pura.

>
> > Además tanto la implementación de proxessWith como el destructor deberían ser privados en la derivada.
> Buen punto.
>
> <at> Fran: Ahora tenés que mandar la implementación en cpp11.

<at> ema: no seas cagón y aparecé

>
>
> Nicolás Brailovsky
> - Tech blog http://monoinfinito.wordpress.com
>
>
> 2016-04-20 14:43 GMT+02:00 dgutson . <danielgutson-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>:
>>
>> Me quejo del nombre de la clase base que me parece que confunde (ya que el que procesa es el argumento pasado) y que no usaste el != NULL en la 22.
>> Y que el next podría estar en la clase base; más aún, es donde más tiene sentido dejar la parte de lista en la clase base.
>> Además tanto la implementación de proxessWith como el destructor deberían ser privados en la derivada.
>>
>> El 20/4/2016 4:28, "Nicolás Brailovsky" <nicolasbrailo-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> escribió:
>>>
>>> Ya que no parece haber mucha gente levantando el guante, va versión 98': http://pastebin.com/csZGtNNx
>>> Desventaja, requiere objetos copiables.
>>>
>>> Alguna otra idea?
>>>
>>>
>>>
>>> Nicolás Brailovsky
>>> - Tech blog http://monoinfinito.wordpress.com
>>>
>>>
>>> 2016-04-16 4:51 GMT+02:00 Fran <francisco.herrero-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>:
>>>>
>>>> Me salió con c++11, pero no se me ocurre como hacer en c++98:
>>>> - Pasaje de argumentos de constructor sin uso de variadic templates
>>>> - Encapsular las invocaciones de procesamiento para cada caso sin uso de std::function
>>>>
>>>> No lo comparto hasta que algunos ya hayan hecho el camino.
>>>> Voy a seguir metiendo tuerca a ver si sale al estilo old school.
>>>>
>>>> 2016-04-14 11:51 GMT-03:00 dgutson . <danielgutson-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>:
>>>>>
>>>>> Vamos a empezar distinto....
>>>>>
>>>>> Cómo harían esto en C++98?
>>>>>
>>>>> El 14/4/2016 10:55, "dgutson ." <danielgutson-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> escribió:
>>>>>>
>>>>>>
>>>>>> El 14/4/2016 10:48, "Nicolás Brailovsky" <nicolasbrailo-Re5JQEeQqe8@public.gmane.orgm> escribió:
>>>>>> >
>>>>>> > Claro... pero no tiene gracia tirar las respuestas si no hay discusión! Tiro una pista sobre la solución que estuve pensando, a ver si alguien se anima: El bit "En C++11" es extremadamente importante: implementar lo mismo en C++98 es (casi) imposible. De la lista de new features en C++11, cuál simplifica manipular listas de elementos heterogéneos?
>>>>>>
>>>>>> Guarda para no confundir:
>>>>>>
>>>>>>   1) olvídense de los "variants" que todavía no se estandarizaron y que de todas formas no se sirven
>>>>>>
>>>>>>   2) siguiendo la idea de pistas tiro otra: noten que los tipos de datos contenidos por los nodos deben poder ser construidos según los constructores que ellos tengan (caso1 tiene solo el default, caso2 tiene el entero)
>>>>>>
>>>>>> >
>>>>>> >
>>>>>> >
>>>>>> >
>>>>>> >
>>>>>> > 2016-04-14 14:15 GMT+02:00 Martin Galvan <omgalvan.86-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>:
>>>>>> >>
>>>>>> >> Pero que ponga las respuestas unos dias despues.
>>>>>> >>
>>>>>> >> El miércoles, 13 de abril de 2016, 10:14:08 (UTC-3), nicola...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org escribió:
>>>>>> >>>
>>>>>> >>> Dani, tenés que empezar un blog y postear estos desafíos de forma regular!
>>>>>> >>>
>>>>>> >>>
>>>>>> >>>
>>>>>> >>> Nicolás Brailovsky
>>>>>> >>> - Tech blog http://monoinfinito.wordpress.com
>>>>>> >>>
>>>>>> >>>
>>>>>> >>> 2016-04-12 20:09 GMT+02:00 dgutson . <daniel...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>:
>>>>>> >>>>
>>>>>> >>>> como le prometí a mi amigo Leo Puy, acá va:
>>>>>> >>>>
>>>>>> >>>> En C++11 (o 14), hacer una lista cuyos nodos CONTENGAN cualquier tipo
>>>>>> >>>> de objeto (no lo apunten, si no que lo contengan). Todos los nodos
>>>>>> >>>> pueden contener objetos distintos (a diferencia de std::list que
>>>>>> >>>> contiene siempre objetos iguales). Adicionalmente, se le pasará un
>>>>>> >>>> processor que haga algo con esos nodos. Por ejemplo:
>>>>>> >>>>
>>>>>> >>>> struct Caso1
>>>>>> >>>> {};
>>>>>> >>>>
>>>>>> >>>> struct Caso2
>>>>>> >>>> {
>>>>>> >>>>     const int x;
>>>>>> >>>>     Caso2(int x) : x(x){}
>>>>>> >>>> };
>>>>>> >>>>
>>>>>> >>>> #include <iostream>
>>>>>> >>>> using std::cout;
>>>>>> >>>>
>>>>>> >>>> struct ProcessorCaso1Caso2
>>>>>> >>>> {
>>>>>> >>>>     void process(Caso1&) { cout << "process caso1\n"; }
>>>>>> >>>>     void process(Caso2& c2) { cout << "process caso2 x=" << c2.x << "\n"; }
>>>>>> >>>> };
>>>>>> >>>>
>>>>>> >>>> int main()
>>>>>> >>>> {
>>>>>> >>>>     MyList<ProcessorCaso1Caso2> ml;
>>>>>> >>>>
>>>>>> >>>>     /* agregar acá varios casos 1 y 2 (pasándole el int) usando la
>>>>>> >>>> interfaz de ml*/
>>>>>> >>>>
>>>>>> >>>>     ProcessorCaso1Caso2 p;
>>>>>> >>>>     ml.processWith(p);
>>>>>> >>>> }
>>>>>> >>>>
>>>>>> >>>> Guarda con los spoilers. Si están muy seguros, no respondan en
>>>>>> >>>> seguida, dejemos primero interactuar a los que tengan más dudas.
>>>>>> >>>>
>>>>>> >>>>     Daniel.
>>>>>> >>>>
>>>>>> >>>> --
>>>>>> >>>> Who’s got the sweetest disposition?
>>>>>> >>>> One guess, that’s who?
>>>>>> >>>> Who’d never, ever start an argument?
>>>>>> >>>> Who never shows a bit of temperament?
>>>>>> >>>> Who's never wrong but always right?
>>>>>> >>>> Who'd never dream of starting a fight?
>>>>>> >>>> Who get stuck with all the bad luck?
>>>>>> >>>>
>>>>>> >>>> --
>>>>>> >>>> --
>>>>>> >>>> ¿Eres miembro de "CyC++ Buenos Aires" verdad? Si no lo eres, has recibido este mesaje por error.
>>>>>> >>>> En caso de duda visita "http://groups.google.com/group/cppba"
>>>>>> >>>> ---
>>>>>> >>>> Has recibido este mensaje porque estás suscrito al grupo "CyC++ Buenos Aires" de Grupos de Google.
>>>>>> >>>> Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a cppba+un... <at> googlegroups.com.
>>>>>> >>>> Para obtener más opciones, visita https://groups.google.com/d/optout.
>>>>>> >>>
>>>>>> >>>
>>>>>> >> --
>>>>>> >> --
>>>>>> >> ¿Eres miembro de "CyC++ Buenos Aires" verdad? Si no lo eres, has recibido este mesaje por error.
>>>>>> >> En caso de duda visita "http://groups.google.com/group/cppba"
>>>>>> >> ---
>>>>>> >> Has recibido este mensaje porque estás suscrito al grupo "CyC++ Buenos Aires" de Grupos de Google.
>>>>>> >> Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a cppba+unsubscribe <at> googlegroups.com.
>>>>>> >> Para acceder a más opciones, visita https://groups.google.com/d/optout.
>>>>>> >
>>>>>> >
>>>>>> > --
>>>>>> > --
>>>>>> > ¿Eres miembro de "CyC++ Buenos Aires" verdad? Si no lo eres, has recibido este mesaje por error.
>>>>>> > En caso de duda visita "http://groups.google.com/group/cppba"
>>>>>> > ---
>>>>>> > Has recibido este mensaje porque estás suscrito al grupo "CyC++ Buenos Aires" de Grupos de Google.
>>>>>> > Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a cppba+unsubscribe <at> googlegroups.com.
>>>>>> > Para acceder a más opciones, visita https://groups.google.com/d/optout.
>>>>>
>>>>> --
>>>>> --
>>>>> ¿Eres miembro de "CyC++ Buenos Aires" verdad? Si no lo eres, has recibido este mesaje por error.
>>>>> En caso de duda visita "http://groups.google.com/group/cppba"
>>>>> ---
>>>>> Has recibido este mensaje porque estás suscrito al grupo "CyC++ Buenos Aires" de Grupos de Google.
>>>>> Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a cppba+unsubscribe <at> googlegroups.com.
>>>>> Para acceder a más opciones, visita https://groups.google.com/d/optout.
>>>>
>>>>
>>>>
>>>>
>>>> --
>>>> "El hombre se descubre cuando se mide con un obstáculo"
>>>> (Saint Exupéry)
>>>>
>>>> --
>>>> --
>>>> ¿Eres miembro de "CyC++ Buenos Aires" verdad? Si no lo eres, has recibido este mesaje por error.
>>>> En caso de duda visita "http://groups.google.com/group/cppba"
>>>> ---
>>>> Has recibido este mensaje porque estás suscrito al grupo "CyC++ Buenos Aires" de Grupos de Google.
>>>> Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a cppba+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org.
>>>> Para acceder a más opciones, visita https://groups.google.com/d/optout.
>>>
>>>
>>> --
>>> --
>>> ¿Eres miembro de "CyC++ Buenos Aires" verdad? Si no lo eres, has recibido este mesaje por error.
>>> En caso de duda visita "http://groups.google.com/group/cppba"
>>> ---
>>> Has recibido este mensaje porque estás suscrito al grupo "CyC++ Buenos Aires" de Grupos de Google.
>>> Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a cppba+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org.
>>> Para acceder a más opciones, visita https://groups.google.com/d/optout.
>>
>> --
>> --
>> ¿Eres miembro de "CyC++ Buenos Aires" verdad? Si no lo eres, has recibido este mesaje por error.
>> En caso de duda visita "http://groups.google.com/group/cppba"
>> ---
>> Has recibido este mensaje porque estás suscrito al grupo "CyC++ Buenos Aires" de Grupos de Google.
>> Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a cppba+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org.
>> Para acceder a más opciones, visita https://groups.google.com/d/optout.
>
>
> --
> --
> ¿Eres miembro de "CyC++ Buenos Aires" verdad? Si no lo eres, has recibido este mesaje por error.
> En caso de duda visita "http://groups.google.com/group/cppba"
> ---
> Has recibido este mensaje porque estás suscrito al grupo "CyC++ Buenos Aires" de Grupos de Google.
> Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a cppba+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org.
> Para acceder a más opciones, visita https://groups.google.com/d/optout.

--
--
¿Eres miembro de "CyC++ Buenos Aires" verdad? Si no lo eres, has recibido este mesaje por error.
En caso de duda visita "http://groups.google.com/group/cppba"
---
Has recibido este mensaje porque estás suscrito al grupo "CyC++ Buenos Aires" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a cppba+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org.
Para acceder a más opciones, visita https://groups.google.com/d/optout.
dgutson . | 20 Apr 14:43 2016
Picon

Re: [cppba] un poco de ejercitación

Me quejo del nombre de la clase base que me parece que confunde (ya que el que procesa es el argumento pasado) y que no usaste el != NULL en la 22.
Y que el next podría estar en la clase base; más aún, es donde más tiene sentido dejar la parte de lista en la clase base.
Además tanto la implementación de proxessWith como el destructor deberían ser privados en la derivada.

El 20/4/2016 4:28, "Nicolás Brailovsky" <nicolasbrailo <at> gmail.com> escribió:
Ya que no parece haber mucha gente levantando el guante, va versión 98': http://pastebin.com/csZGtNNx
Desventaja, requiere objetos copiables.

Alguna otra idea?



Nicolás Brailovsky


2016-04-16 4:51 GMT+02:00 Fran <francisco.herrero-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>:
Me salió con c++11, pero no se me ocurre como hacer en c++98:
- Pasaje de argumentos de constructor sin uso de variadic templates
- Encapsular las invocaciones de procesamiento para cada caso sin uso de std::function

No lo comparto hasta que algunos ya hayan hecho el camino.
Voy a seguir metiendo tuerca a ver si sale al estilo old school.

2016-04-14 11:51 GMT-03:00 dgutson . <danielgutson-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>:

Vamos a empezar distinto....

Cómo harían esto en C++98?

El 14/4/2016 10:55, "dgutson ." <danielgutson <at> gmail.com> escribió:


El 14/4/2016 10:48, "Nicolás Brailovsky" <nicolasbrailo-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> escribió:
>
> Claro... pero no tiene gracia tirar las respuestas si no hay discusión! Tiro una pista sobre la solución que estuve pensando, a ver si alguien se anima: El bit "En C++11" es extremadamente importante: implementar lo mismo en C++98 es (casi) imposible. De la lista de new features en C++11, cuál simplifica manipular listas de elementos heterogéneos?

Guarda para no confundir:

  1) olvídense de los "variants" que todavía no se estandarizaron y que de todas formas no se sirven

  2) siguiendo la idea de pistas tiro otra: noten que los tipos de datos contenidos por los nodos deben poder ser construidos según los constructores que ellos tengan (caso1 tiene solo el default, caso2 tiene el entero)

>
>
>
>
>
> 2016-04-14 14:15 GMT+02:00 Martin Galvan <omgalvan.86-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>:
>>
>> Pero que ponga las respuestas unos dias despues.
>>
>> El miércoles, 13 de abril de 2016, 10:14:08 (UTC-3), nicola...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org escribió:
>>>
>>> Dani, tenés que empezar un blog y postear estos desafíos de forma regular!
>>>
>>>
>>>
>>> Nicolás Brailovsky
>>> - Tech blog http://monoinfinito.wordpress.com
>>>
>>>
>>> 2016-04-12 20:09 GMT+02:00 dgutson . <daniel...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>:
>>>>
>>>> como le prometí a mi amigo Leo Puy, acá va:
>>>>
>>>> En C++11 (o 14), hacer una lista cuyos nodos CONTENGAN cualquier tipo
>>>> de objeto (no lo apunten, si no que lo contengan). Todos los nodos
>>>> pueden contener objetos distintos (a diferencia de std::list que
>>>> contiene siempre objetos iguales). Adicionalmente, se le pasará un
>>>> processor que haga algo con esos nodos. Por ejemplo:
>>>>
>>>> struct Caso1
>>>> {};
>>>>
>>>> struct Caso2
>>>> {
>>>>     const int x;
>>>>     Caso2(int x) : x(x){}
>>>> };
>>>>
>>>> #include <iostream>
>>>> using std::cout;
>>>>
>>>> struct ProcessorCaso1Caso2
>>>> {
>>>>     void process(Caso1&) { cout << "process caso1\n"; }
>>>>     void process(Caso2& c2) { cout << "process caso2 x=" << c2.x << "\n"; }
>>>> };
>>>>
>>>> int main()
>>>> {
>>>>     MyList<ProcessorCaso1Caso2> ml;
>>>>
>>>>     /* agregar acá varios casos 1 y 2 (pasándole el int) usando la
>>>> interfaz de ml*/
>>>>
>>>>     ProcessorCaso1Caso2 p;
>>>>     ml.processWith(p);
>>>> }
>>>>
>>>> Guarda con los spoilers. Si están muy seguros, no respondan en
>>>> seguida, dejemos primero interactuar a los que tengan más dudas.
>>>>
>>>>     Daniel.
>>>>
>>>> --
>>>> Who’s got the sweetest disposition?
>>>> One guess, that’s who?
>>>> Who’d never, ever start an argument?
>>>> Who never shows a bit of temperament?
>>>> Who's never wrong but always right?
>>>> Who'd never dream of starting a fight?
>>>> Who get stuck with all the bad luck?
>>>>
>>>> --
>>>> --
>>>> ¿Eres miembro de "CyC++ Buenos Aires" verdad? Si no lo eres, has recibido este mesaje por error.
>>>> En caso de duda visita "http://groups.google.com/group/cppba"
>>>> ---
>>>> Has recibido este mensaje porque estás suscrito al grupo "CyC++ Buenos Aires" de Grupos de Google.
>>>> Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a cppba+un... <at> googlegroups.com.
>>>> Para obtener más opciones, visita https://groups.google.com/d/optout.
>>>
>>>
>> --
>> --
>> ¿Eres miembro de "CyC++ Buenos Aires" verdad? Si no lo eres, has recibido este mesaje por error.
>> En caso de duda visita "http://groups.google.com/group/cppba"
>> ---
>> Has recibido este mensaje porque estás suscrito al grupo "CyC++ Buenos Aires" de Grupos de Google.
>> Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a cppba+unsubscribe <at> googlegroups.com.
>> Para acceder a más opciones, visita https://groups.google.com/d/optout.
>
>
> --
> --
> ¿Eres miembro de "CyC++ Buenos Aires" verdad? Si no lo eres, has recibido este mesaje por error.
> En caso de duda visita "http://groups.google.com/group/cppba"
> ---
> Has recibido este mensaje porque estás suscrito al grupo "CyC++ Buenos Aires" de Grupos de Google.
> Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a cppba+unsubscribe <at> googlegroups.com.
> Para acceder a más opciones, visita https://groups.google.com/d/optout.

--
--
¿Eres miembro de "CyC++ Buenos Aires" verdad? Si no lo eres, has recibido este mesaje por error.
En caso de duda visita "http://groups.google.com/group/cppba"
---
Has recibido este mensaje porque estás suscrito al grupo "CyC++ Buenos Aires" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a cppba+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org.
Para acceder a más opciones, visita https://groups.google.com/d/optout.



--
"El hombre se descubre cuando se mide con un obstáculo"
(Saint Exupéry)

--
--
¿Eres miembro de "CyC++ Buenos Aires" verdad? Si no lo eres, has recibido este mesaje por error.
En caso de duda visita "http://groups.google.com/group/cppba"
---
Has recibido este mensaje porque estás suscrito al grupo "CyC++ Buenos Aires" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a cppba+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org.
Para acceder a más opciones, visita https://groups.google.com/d/optout.

--
--
¿Eres miembro de "CyC++ Buenos Aires" verdad? Si no lo eres, has recibido este mesaje por error.
En caso de duda visita "http://groups.google.com/group/cppba"
---
Has recibido este mensaje porque estás suscrito al grupo "CyC++ Buenos Aires" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a cppba+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org.
Para acceder a más opciones, visita https://groups.google.com/d/optout.

--
--
¿Eres miembro de "CyC++ Buenos Aires" verdad? Si no lo eres, has recibido este mesaje por error.
En caso de duda visita "http://groups.google.com/group/cppba"
---
Has recibido este mensaje porque estás suscrito al grupo "CyC++ Buenos Aires" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a cppba+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org.
Para acceder a más opciones, visita https://groups.google.com/d/optout.
Leonardo Puy | 14 Apr 21:16 2016
Picon

Unions y bitfields

Hola, 

Stroustrup menciona que los unions se usan a veces (incorrectamente) para convertir tipos de datos o ahorrar espacio, que son "error prone" y un "overused feature". Alguien tiene algo en contra de un uso mas legitimo en low level, específicamente para tener acceso a los bits que forman parte de un registro, que frecuentemente es leído y/o escrito como un solo numero?

#include <iostream>


using namespace std;


int main(int argc, const char * argv[]) {

    union Info

    {

        struct BitField

        {

            unsigned int data : 6;

            unsigned int dirty : 1;

            unsigned int active : 1;

        } bitField;

        unsigned char field;

    };

    

    Info i;

    i.field = 0xC5;

    std::cout << "Field=0x" << hex << static_cast<int>(i.field) << " [Active=" << i.bitField.active << " Dirty=" << i.bitField.dirty << " Data=0x" << hex << i.bitField.data << "]" << endl;

}


--
--
¿Eres miembro de "CyC++ Buenos Aires" verdad? Si no lo eres, has recibido este mesaje por error.
En caso de duda visita "http://groups.google.com/group/cppba"
---
Has recibido este mensaje porque estás suscrito al grupo "CyC++ Buenos Aires" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a cppba+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org.
Para acceder a más opciones, visita https://groups.google.com/d/optout.
dgutson . | 12 Apr 20:09 2016
Picon

[cppba] un poco de ejercitación

como le prometí a mi amigo Leo Puy, acá va:

En C++11 (o 14), hacer una lista cuyos nodos CONTENGAN cualquier tipo
de objeto (no lo apunten, si no que lo contengan). Todos los nodos
pueden contener objetos distintos (a diferencia de std::list que
contiene siempre objetos iguales). Adicionalmente, se le pasará un
processor que haga algo con esos nodos. Por ejemplo:

struct Caso1
{};

struct Caso2
{
    const int x;
    Caso2(int x) : x(x){}
};

#include <iostream>
using std::cout;

struct ProcessorCaso1Caso2
{
    void process(Caso1&) { cout << "process caso1\n"; }
    void process(Caso2& c2) { cout << "process caso2 x=" << c2.x << "\n"; }
};

int main()
{
    MyList<ProcessorCaso1Caso2> ml;

    /* agregar acá varios casos 1 y 2 (pasándole el int) usando la
interfaz de ml*/

    ProcessorCaso1Caso2 p;
    ml.processWith(p);
}

Guarda con los spoilers. Si están muy seguros, no respondan en
seguida, dejemos primero interactuar a los que tengan más dudas.

    Daniel.

-- 
Who’s got the sweetest disposition?
One guess, that’s who?
Who’d never, ever start an argument?
Who never shows a bit of temperament?
Who's never wrong but always right?
Who'd never dream of starting a fight?
Who get stuck with all the bad luck?

-- 
--

-- 
¿Eres miembro de "CyC++ Buenos Aires" verdad? Si no lo eres, has recibido este mesaje por error. 
En caso de duda visita "http://groups.google.com/group/cppba"
--- 
Has recibido este mensaje porque estás suscrito al grupo "CyC++ Buenos Aires" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a cppba+unsubscribe <at> googlegroups.com.
Para obtener más opciones, visita https://groups.google.com/d/optout.

aguml | 11 Apr 17:37 2016
Picon

Iniciar array de cadenas constantes en el constructor

Hola amigos necesito de vuestra ayuda para ver si puedo solucionar esto. Tengo una aplicacion en la que quiero hacer algo asi:
private:
   
const char* GoodKey;
   
const char *HintsMessages[18],*HintsMessagesTypes[2];

__fastcall TForm1::TForm1(TComponent* Owner)
   
: TForm(Owner)
{
   
//Inicializo la cadena constante de validacion de entrada del teclado
   
GoodKey = "0123456789abcdefABCDEF";

   
HintsMessages = {"Este mensaje activa la ventana.",
                   
"Este mensaje pone el foco en la ventana.",
                   
"Este mensaje quita el foco de la ventana.",
                   
"Este mensaje indica si se redibuja la ventana o no.",
                   
"Este mensaje se envia para preguntar a una ventana si se puede cerrar al cerrar sesión.",
                   
"Este mensaje se envia para indicar a una ventana que se va a cerrar sesión.",
                   
"Este mensaje envia un clic izquierdo.",
                   
"Este mensaje es el que se da al pulsar el botón izquierdo del ratón.",
                   
"Este mensaje es el que se da al soltar el botón izquierdo del ratón.",
                   
"Este mensaje es el que se da al hacer doble clic con el botón izquierdo del ratón.",
                   
"Este mensaje es el que se da al pulsar el botón derecho del ratón.",
                   
"Este mensaje es el que se da al soltar el botón derecho del ratón.",
                   
"Este mensaje es el que se da al hacer doble clic con el botón derecho del ratón.",
                   
"Este mensaje es el que se da al pulsar el botón central del ratón.",
                   
"Este mensaje es el que se da al soltar el botón central del ratón.",
                   
"Este mensaje es el que se da al hacer doble clic con el botón central del ratón.",
                   
"Este mensaje es el que se da al girar la rueda vertical del ratón.",
                   
"Este mensaje es el que se da al girar la rueda horizontal del ratón."};

   
HintsMessagesTypes = {"Esta opción espera la respuesta. El valor de retorno será la respuesta obtenida.",
                         
"Esta opción no espera respuesta alguna. Retorna 1 si se envió correctamente y 0 si falló."};
}

GoodKey va bien pero la inicializacion de los dos arrays de cadenas no se los traga el compilador y no se como hacerlo para que quede correcto. Llevo todo el dia probando cosas, incluso cambiandolo a std::string y todo pero realmente deseo que sean const char*[] y no me funciona nada de lo que intento. ¿podeis ayudarme?

--
--
¿Eres miembro de "CyC++ Buenos Aires" verdad? Si no lo eres, has recibido este mesaje por error.
En caso de duda visita "http://groups.google.com/group/cppba"
---
Has recibido este mensaje porque estás suscrito al grupo "CyC++ Buenos Aires" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a cppba+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org.
Para acceder a más opciones, visita https://groups.google.com/d/optout.
RFOG Gmail | 14 Mar 14:43 2016
Picon

wchar_t* a char_16* y viceversa

Me ha entrado un código guarrindongo a más no poder que se junta con lo que creo que es código guarrindongo
de la fundación Mozilla.

Están usando el xulrunner de Mozilla para sacar cosas, y lo que han hecho es una DLL windwows que encapsula
todo el tema. 

Esa DLL recibe punteros wchar_t pero todo el código Mozilla acepta char16_t… por lo que esta gente está
guarrindongamente asignando una cosa a la otra… con Visual C++ 10 el compilador no protesta… porque
los garrindongos de Mozzila han hecho 

“typedef wchar_t char16_t” 

en Char16.h

Pero Visual Studio 2015 no acepta esa definición porque supongo que es mucho más estándar (el
compilador, digo)…

Entonces estoy teniendo muchos errores de compilación con eso.

Es decir, he eliminado esa definición (yo no, los propios de Mozilla en una versión superior de xulrunner
que ya no acepta funcionar como proyecto independiente pero que yo he adaptado a la versión 30 que sí lo acepta).

Lo que estoy haciendo ahora es simplemente moldear char16_t en wchar_t y sus respectivos punteros y el
compilador está tragando sin problemas. Todavía no he solucionado todos los errores de compilación
pero ando en ello.

Mi pregunta es que si compilado con la versión 2010 funciona, con los moldeos y la 2015 también… pero
supongo que habrá otra forma mejor de hacer todo esto…

No sé, ¿qué opináis?

-- 
--

-- 
¿Eres miembro de "CyC++ Buenos Aires" verdad? Si no lo eres, has recibido este mesaje por error. 
En caso de duda visita "http://groups.google.com/group/cppba"
--- 
Has recibido este mensaje porque estás suscrito al grupo "CyC++ Buenos Aires" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a cppba+unsubscribe <at> googlegroups.com.
Para obtener más opciones, visita https://groups.google.com/d/optout.

dgutson . | 24 Feb 09:57 2016
Picon

Alguien en EW?

Hay alguien en estos días en Embedded World? Que avise y nos juntamos!

    Daniel.

--
--
¿Eres miembro de "CyC++ Buenos Aires" verdad? Si no lo eres, has recibido este mesaje por error.
En caso de duda visita "http://groups.google.com/group/cppba"
---
Has recibido este mensaje porque estás suscrito al grupo "CyC++ Buenos Aires" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a cppba+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org.
Para acceder a más opciones, visita https://groups.google.com/d/optout.
RFOG Gmail | 21 Jan 15:56 2016
Picon

[cppba] Código muy extraño

Hola, qué tal.

A ver, tengo una duda porque creo que he pillado algo serio en un código Open Source que anda por ahí en
relación a un servicio SOAP.

Os anexo los ficheros y os pongo en antecedentes.

Hay una estructura que se llama soap_nlist que tiene un miembro char id[1].

Hasta ahí nada extraño, pero hay lugares, como en la llamada a soap_push_namespace() que hace cosas como esta:

 np->ns = strcpy((char*)np->id + n + 1, ns);

A todas luces saliéndose del array… No sé, quizás se me escape algo, porque por otro lado veo que asigna
ese id a NULL...

-- 
--

-- 
¿Eres miembro de "CyC++ Buenos Aires" verdad? Si no lo eres, has recibido este mesaje por error. 
En caso de duda visita "http://groups.google.com/group/cppba"
--- 
Has recibido este mensaje porque estás suscrito al grupo "CyC++ Buenos Aires" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a cppba+unsubscribe <at> googlegroups.com.
Para obtener más opciones, visita https://groups.google.com/d/optout.
Attachment (stdsoap2.cpp): application/octet-stream, 475 KiB
Attachment (stdsoap2.h): application/octet-stream, 91 KiB

Gmane