2011-02-14 20 views
7

Tengo algunos TypeDefs que quiero desaprobar. Estoy haciendo esto para mantener la compatibilidad hacia atrás con el código que ya existe. ¿Existe una solución elegante (o tal vez no tan elegante) para esto? Me gustaría que fuera independiente de la plataforma, pero si hay una solución de Visual Studio, eso también lo hará.Deprecate Typedef

+4

No hay una solución portátil. @Nawaz dio la extensión de Microsoft. El equivalente de gcc es 'typedef int myint __attribute __ ((obsoleto));'. – aschepler

Respuesta

11

En MSVC++, se puede despreciar typedef así:

typedef __declspec(deprecated) int myint; 

El compilador MSVC++ generará advirtiendo que myint es obsoleto!

Y si desea que el compilador generar un mensaje específico al compilar un typedef en desuso, a continuación, hacer esto:

typedef __declspec(deprecated("myint is deprecated, so most likely in the next version this myint will be missing")) int myint; 
+0

hacer qué? Creo que te perdiste la última parte :)) – lurscher

+1

Probablemente necesites cerrar el último paréntesis. OT: http://xkcd.com/859/ – KitsuneYMG

+0

@KitsuneYMG: Sí. Eso fue un error tipográfico ¡Gracias! – Nawaz

4

Si se permite que una sola vez los cambios en el código fáciles que sólo podía mover el typedef en un deprecated espacio de nombres que requiere el uso de using namespace deprecated en los puntos que usan typedef.

Si eso no es una opción que podría ser posible confeccionar una plantilla que, cuando se crea una instancia, generaría una advertencia, pero no saben cómo generar una advertencia tales improviso:

template <class T> 
class TypedefHolder; 

template <> 
class TypedefHolder<int> 
{ 
    typedef int WhateverType; 
    // Something that induces a compile warning. 
}; 

así que en vez de:

typedef int WhateverType; 

se convierte en:

typedef TypedefHolder<int>::WhateverType WhateverType; 
+0

Creo que esta es una muy buena solución si pudiera generar advertencias del compilador. ¿Alguien tiene alguna idea sobre advertencias personalizadas? – Samaursa