Макропеременная после ключевого слова класса - PullRequest
4 голосов
/ 30 июня 2010

Я нашел это в Ogre Framework

class _OgreSampleClassExport Sample_Character : public SdkSample {
...
...

, и это определено так

#define _OgreSampleClassExport

Почему мы хотим иметь эту макропеременную?

Ответы [ 2 ]

5 голосов
/ 30 июня 2010

Предположительно, поэтому специальный классификатор, такой как __declspec(dllexport), может быть добавлен к таким классам путем изменения (или условного определения) определения:

#define _OgreSampleClassExport __declspec(dllexport)
3 голосов
/ 30 июня 2010

Это для будущего экспорта.На данный момент Ogre может быть строго статически связанной библиотекой, но если авторы решат поддерживать динамически связанные библиотеки (так называемые разделяемые библиотеки на некоторых платформах), им нужно будет написать код, подобный:

class
#ifdef EXPORTING
    __declspec(dllexport)
#else
    __declspec(dllimport)
#endif
Sample_Character [...]

... и это только для MSVC.Обычно они должны были бы приложить усилия, чтобы сделать это с Sample_Character и всеми другими классами, которые они предоставляют через свою библиотеку.Создание одного макроса, который будет определен позже, намного проще, поскольку им нужно будет сделать это только в одном месте.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...