c++ - 如何对类声明进行字符串化并定义它?
问题描述
我需要将我的类声明转换为字符串,我还需要定义类。在下面的代码中,我给出了一个导致Identifier Person is undefined
or的示例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;
解决方案
你不能那样做;您不能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";}
推荐阅读
- spring-boot - 如何将 POJO 传递给 SpringBoot 应用程序的运行方法?
- api - 不获取访问令牌
- javascript - 在不使用内置 array.pop() 函数的情况下从数组中弹出最后一项
- elixir - ecto_fixtures,预加载关联
- python - 添加具有不同列名的两个 Pandas 系列的值
- image - 更改个人用户的图像Angular 5
- sql - 使用 Union Select 合并查询
- java - 如何创建模块化 JavaFX11 可运行 jar/exe?
- c++ - 如何仅将空格字符添加到二维数组中的第一列和最后一列和行?
- office-js - Outlook Web 加载项:displayDialogAsync() 不起作用