Могут ли макросы C ++ добавить некоторый код в конец файла C ++? - PullRequest
3 голосов
/ 08 августа 2011

Итак, у меня есть такой код:

// puma.cpp
#include "FILE_WITH_MACROS.hpp"
ANIMAL_MACROS_NAME_HERE class puma : public animal {
 public:
  puma(int age) : animal(age) {}
  virtual std::string get_name() {
    return "puma";
  }
};
//end of puma.cpp and here we want to add some more code via ANIMAL_MACROS_NAME_HERE  macros.

Могут ли мои макросы, которые я использую в середине моего файла C ++, добавить какой-нибудь код в конец моего файла?

Ответы [ 4 ]

2 голосов
/ 08 августа 2011

Если я не очень сильно ошибаюсь, боюсь, что нет. Макросы C довольно минимальны по своим возможностям. Есть ли какая-то особая причина, по которой макрос не может генерировать код до объявления puma?

1 голос
/ 08 августа 2011

Вы не можете добавить его, если у вас есть только ANIMAL_MACROS_NAME_HERE перед именем вашего класса.Вам нужно добавить еще один символ внизу вашего файла, который расширится до дополнительного кода, который вы хотите.

1 голос
/ 08 августа 2011

Нет, но вы всегда можете добавить еще один макрос в конец файла.

В некоторых случаях может быть возможно сделать что-то вроде этого:

#define MY_CLASS_WITH_END_STUFF(derived, parent) \
    ANIMAL_MACROS_NAME_HERE class derived : public parent \
    { \
    public: \
        ... \
    }; \
    // here you can add stuff now as part of the macro...

Тогда вы быОпределите классы с помощью внешнего макроса следующим образом:

MY_CLASS_WITH_END_STUFF(puma, animal);

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

1 голос
/ 08 августа 2011

Нет.Макросы развертываются в том месте, где препроцессор встречает их в исходном файле.

...