макрос перед определением класса в c ++ - PullRequest
0 голосов
/ 04 ноября 2018

Кто-нибудь может объяснить, что делает макрос перед следующей декларацией класса (термин OPENRTI_LOCAL в следующем коде)? Пожалуйста, игнорируйте контекст следующего примера. Я ищу общее объяснение следующего типа объявления класса cpp.

namespace OpenRTI {
  class OPENRTI_LOCAL RTI1516ETestAmbassador : public RTITest::Ambassador, 
  public rti1516e::FederateAmbassador {
  ......
  }
}

Ответы [ 2 ]

0 голосов
/ 04 ноября 2018

Проверка Исходный код OpenRTI , похоже, он просто указывает на то, что просто предполагается скрыть при компиляции в общую библиотеку:

// Now we use the generic helper definitions above to define OPENRTI_API and OPENRTI_LOCAL.
// OPENRTI_LOCAL is used for non-api symbols.

#ifdef OPENRTI_DLL // defined if OPENRTI is compiled as a DLL
# define OPENRTI_LOCAL OPENRTI_HELPER_DLL_LOCAL
#else // OPENRTI_DLL is not defined: this means OPENRTI is a static lib.
# define OPENRTI_LOCAL
#endif // OPENRTI_DLL

А OPENRTI_HELPER_DLL_LOCAL составляет:

// Generic helper definitions for shared library support
#if defined _WIN32 || defined __CYGWIN__
# define OPENRTI_HELPER_DLL_LOCAL
#elif defined __GNUC__ && (4 <= __GNUC__)
# define OPENRTI_HELPER_DLL_LOCAL  __attribute__ ((visibility("hidden")))
#elif defined __SUNPRO_C && (0x550 <= __SUNPRO_C)
# define OPENRTI_HELPER_DLL_LOCAL  __hidden
#else
# define OPENRTI_HELPER_DLL_LOCAL
#endif
0 голосов
/ 04 ноября 2018

Это специфичный для библиотеки термин, который вам нужно найти в библиотеке OpenRTI. В общем, в этой позиции может быть спецификатор, такой как стандарт alignas, поэтому макрос может расширяться до такого спецификатора или атрибута, специфичного для поставщика, или просто до пустой строки.

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