Есть ли такой макрос в C++ (кросс-компилятор или определенный для компилятора):
#if isclass(NameSpace::MyClass)
Было бы полезно.
Если вас не волнует переносимость, вам подойдет оператор __ if_exists в VC ++.
Мне кажется, что было бы лучше проверить, включен ли уже заголовочный файл с определением класса, который вы ищете, вместо того, чтобы пытаться увидеть, существует ли класс. Это действительно легко проверить, если вы применяете стандарт определения символа для каждого файла заголовка, как показано:
// myfile.h
#ifndef _MYFILE_H_
#define _MYFILE_H_
// CODE
#endif // _MYFILE_H_
Лучше всего просто убедиться, что файлы заголовков включаются в правильном порядке в первое место. Самый простой способ сделать это - создать «общий» файл заголовка, который, в свою очередь, включает в себя все заголовки, которые вам понадобятся, в правильном порядке. Просто включите это в каждый из исходных файлов в своем проекте, и все будет хорошо. Это не обязательно лучшее решение, но самое простое.
На этапе предварительной обработки такого нет, поэтому нет макроса.
Однако вы можете взглянуть на черты типа is_class
, доступные в Boost или в C ++ 0x, которые позволяют вам принимать решения во время компиляции.
Это невозможно, но вы можете использовать свой include guard , чтобы убедиться, что класс включен.
Нет. Директивы предварительной обработки и макросы оцениваются препроцессором, который завершает свои задачи до того, как код будет проанализирован как C ++. Препроцессор ничего не знает о классах или пространствах имен.