[eside-ghost] Unit testing en C++ en tiempo de compilación? (templates)

Jon Valdés juanval en gmail.com
Mie Ene 28 17:59:15 CET 2009


2009/1/28 Jon Ander Ortiz <jonbaine en gmail.com>:
> Si, existen los asertos en tiempo de compilación:
>
> Estos son de la boost...
>
> http://www.boost.org/doc/libs/1_37_0/doc/html/boost_staticassert.html
>
> Pero luego te puedes fabricar otros con tricks como estas:
>
> http://blog.kowalczyk.info/kb/compile-time-asserts-in-c.html

Hummmm está guay el asunto, pero... yo lo que buscaba es una forma de
comprobar que efectivamente petan cosas al intentar instanciar su
template de formas jartas. Estos sistemas que comentas, lo que hacen
es petar si algo falla en tiempo de compilación, pero eso ya lo he
conseguido al crear el template.

Lo que estoy buscando es, teniendo esto:

   template <int n_cols, int n_rows>
        class Matrix
        {
            [...]
            template<int other_cols>
                    Matrix<other_cols,n_rows> operator*(const
Matrix<other_cols,n_cols>& other) const;
        };

Quiero poder comprobar que el template funciona al multiplicar dos
matrices A<rowsA,colsA> y B<rowsB,colsB>, siempre que rowsA==colsB,
pero que peta en tiempo de compilación siempre que intentas
multiplicar A*B y rowsA != colsB.

El asunto es que tengo unas cuantas cosas así en el template, y me
gustaría poder automatizarlo. Creo que va a ser imposible que exista
algo asi (tendría que ser una forma de detectar errores en tiempo de
compilación, ocultarlos, y seguir compilando como si no hubiera pasado
nada)... pero bueno, por preguntar no pierdo nada.

Enga, muchas gracias,

Taluegooo


Más información sobre la lista de distribución eside-ghost