首页 > 解决方案 > 如何对类声明进行字符串化并定义它?

问题描述

我需要将我的类声明转换为字符串,我还需要定义类。在下面的代码中,我给出了一个导致Identifier Person is undefinedor的示例Incomplete type not allowed。但是如果使用自定义宏可以做到这一点,我们将不胜感激一些代码。

struct Person;
std::string Person::meta = STRINGIFY(
    struct Person{
        static std::string meta;
        std::string name = "Test";
        int age = 5;
        std::string address = "No:35179 Address";
    };
);
Person person;

标签: c++serializationreflectionmacros

解决方案


你不能那样做;您不能Person::meta在定义类型之前进行初始化,也不能将类型定义为初始化表达式的一部分。

但是,您可以将初始化移动到宏中:

#define WITH_META(cls, body) struct cls body; std::string cls::meta = "struct " #cls #body;

WITH_META(Person, {
        static std::string meta;
        std::string name = "Test";
        int age = 5;
        std::string address = "No:35179 Address";
    });

int main()
{
    std::cout << Person::meta << std::endl;
}

输出:

struct Person{static std::string meta; std::string name = "Test"; int age = 5; std::string address = "No:35179 Address";}

推荐阅读