¿Existe tal macro en C++ (compilador cruzado o-compilador específico):C++ macro "si la clase si define"
#if isclass(NameSpace::MyClass)
sería útil.
¿Existe tal macro en C++ (compilador cruzado o-compilador específico):C++ macro "si la clase si define"
#if isclass(NameSpace::MyClass)
sería útil.
Si no le importa la portabilidad, la declaración __if_exists en VC++ satisface sus necesidades.
No hay tal cosa en la etapa de preprocesamiento, por lo que no hay macro.
Sin embargo, puede echar un vistazo a los rasgos de tipo is_class
available in Boost o en C++ 0x que le permiten tomar decisiones en tiempo de compilación.
Creo que el problema aquí es que 'Namespace :: MyClass' tiene que ser declarado como algo, incluso si no es una clase? – UncleBens
Me gustaría incluir archivos, dependiendo del conocimiento si algunas clases ya están definidas. –
@topright: ¿Pero por qué? Hay muchas maneras en que esto podría ser problemático si no tiene cuidado. –
No. Las directivas de preprocesamiento y las macros son evaluadas por el preprocesador, que completa sus tareas antes de que el código se analice como C++. El preprocesador no tiene conocimiento de clases o espacios de nombres.
Eso no es posible, pero podría usar su constante include guard para verificar que la clase haya sido incluida.
Sí, de hecho. Pero no es la solución real. –
¿A qué problema? – soulmerge
Me parece que sería mejor probar si aún se ha incluido el archivo de encabezado con la definición de clase que está buscando, en lugar de tratar de ver si la clase existe. Es muy fácil de comprobar esto si usted ha sido la aplicación de la norma de definir un símbolo para cada archivo de cabecera, como se muestra:
// myfile.h
#ifndef _MYFILE_H_
#define _MYFILE_H_
// CODE
#endif // _MYFILE_H_
Su mejor apuesta, sin embargo, es simplemente asegurarse de que sus archivos de cabecera están siendo incluidos en el orden correcto en primer lugar. La forma más fácil de hacerlo es tener un archivo de encabezado "general" que a su vez incluya todos los encabezados que necesitará en el orden correcto. Simplemente incluya eso en cada uno de los archivos fuente en su proyecto, y estará listo para comenzar. Esta no es necesariamente la mejor solución, pero es la más fácil.
¿Cuál es la imagen más grande? ¿Que estás tratando de hacer? –