Макрос C++, “если класс определяется”

Есть ли такой макрос в C++ (кросс-компилятор или определенный для компилятора):

#if isclass(NameSpace::MyClass)

Было бы полезно.

9
задан Drew Dormann 23 May 2018 в 19:16
поделиться

5 ответов

Если вас не волнует переносимость, вам подойдет оператор __ if_exists в VC ++.

8
ответ дан 4 December 2019 в 07:23
поделиться

Мне кажется, что было бы лучше проверить, включен ли уже заголовочный файл с определением класса, который вы ищете, вместо того, чтобы пытаться увидеть, существует ли класс. Это действительно легко проверить, если вы применяете стандарт определения символа для каждого файла заголовка, как показано:

// myfile.h

#ifndef _MYFILE_H_
#define _MYFILE_H_

// CODE

#endif // _MYFILE_H_

Лучше всего просто убедиться, что файлы заголовков включаются в правильном порядке в первое место. Самый простой способ сделать это - создать «общий» файл заголовка, который, в свою очередь, включает в себя все заголовки, которые вам понадобятся, в правильном порядке. Просто включите это в каждый из исходных файлов в своем проекте, и все будет хорошо. Это не обязательно лучшее решение, но самое простое.

2
ответ дан 4 December 2019 в 07:23
поделиться

На этапе предварительной обработки такого нет, поэтому нет макроса.

Однако вы можете взглянуть на черты типа is_class , доступные в Boost или в C ++ 0x, которые позволяют вам принимать решения во время компиляции.

5
ответ дан 4 December 2019 в 07:23
поделиться

Это невозможно, но вы можете использовать свой include guard , чтобы убедиться, что класс включен.

5
ответ дан 4 December 2019 в 07:23
поделиться

Нет. Директивы предварительной обработки и макросы оцениваются препроцессором, который завершает свои задачи до того, как код будет проанализирован как C ++. Препроцессор ничего не знает о классах или пространствах имен.

10
ответ дан 4 December 2019 в 07:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: