【问题标题】:Can C++ macros add some code to the end of C++ file?C++ 宏可以在 C++ 文件的末尾添加一些代码吗?
【发布时间】:2011-10-22 10:27:33
【问题描述】:

所以我有这样的代码:

// 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++ 文件中间使用的宏可以在文件末尾添加一些代码吗?

【问题讨论】:

  • 您希望宏最后添加什么?也许还有另一种方法可以实现您想要的……

标签: c++ macros cross-platform c-preprocessor


【解决方案1】:

除非我错了,否则恐怕不会。 C 宏的功能非常少。有什么特殊原因不能让宏在puma 的声明之前生成代码

【讨论】:

    【解决方案2】:

    不,但您始终可以在文件末尾添加另一个宏。

    在某些情况下,可以这样做:

    #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);
    

    这当然可以根据需要以各种方式扩展。但是,它在某些情况下受到限制,例如您要指定的类会有所不同,并且不遵循可以放在宏中的简单约定。

    【讨论】:

    • @最后我想添加什么宏:请看这个post。您能否提供如何从代码中使用您的宏?
    【解决方案3】:

    没有。宏在您的源文件中预处理器遇到它们的地方展开内联。

    【讨论】:

      【解决方案4】:

      如果您的班级名称前只有ANIMAL_MACROS_NAME_HERE,则无法添加它。您需要在文件底部添加另一个符号,该符号将扩展为您想要的额外代码。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-02-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多