Что означает макрос перед определением класса в c ++ - PullRequest
0 голосов
/ 01 мая 2020

Каков синтаксис в C ++, который допускает следующую конструкцию, где слово появляется между "class" и "class_name"?

namespace octave
{
  // Command line arguments.  See also options-usage.h.

  class OCTINTERP_API cmdline_options
  {
  public:
...

Обратите внимание, я не спрашиваю значение макроса. Я не спрашиваю, что это делает. Я не спрашиваю, пусто ли оно. Я спрашиваю о синтаксисе определения класса.

Несколько источников объясняют синтаксис, но без слова в середине, например:

class class_name {
  access_specifier_1:
    member1;
  access_specifier_2:
    member2;
  ...
} object_names;

Обратите внимание, что следующие вопросы задавались о синтаксис и ответы были о другом: макрос перед определением класса в c ++ и C ++ синтаксис определения класса

1 Ответ

4 голосов
/ 01 мая 2020

Это не стандартный C ++ (если макрос не выполняется с пробелами или если вы используете атрибуты ), но он требуется некоторым компиляторам при нацеливании на определенные платформы.

Обычно это происходит, когда построение динамической c связанной библиотеки (dll) для Windows. OCTINTERP_API, вероятно, установлен на __declspec(dllexport) при создании dll, и __declspec(dllimport) при использовании dll.

(см. https://en.cppreference.com/w/cpp/language/classes)

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