如何使用C++宏实现实例化对象时自动将变量名传入构造函数
C++ 变量名自动传入构造函数的宏实现方案
你可以直接使用C/C++预处理器的**字符串化运算符#**实现需求,该运算符的作用是将宏的输入参数转换为对应的字符串字面量,刚好匹配你需要把变量名作为字符串传入构造函数的场景。
宏定义代码
#define CreateA(varName) A* varName = new A(#varName)
效果说明
当你书写CreateA(objectNumber325);时,预处理器会自动将代码展开为:
A* objectNumber325 = new A("objectNumber325");
和你原本手动书写的实例化代码完全等价。
注意事项
- 你当前给出的类
A的构造函数默认是private权限,实际使用时需要将构造函数声明为public,否则无法在类外部完成实例化:class A { public: // 新增public访问修饰符 A(string name) { //.... } }; - 如果需要适配其他实例化场景,可以自行调整宏的定义:
- 栈上实例化非指针对象版本:
#define CreateAStack(varName) A varName(#varName) - 智能指针版本(C++11及以上):
#define CreateAUnique(varName) std::unique_ptr<A> varName = std::make_unique<A>(#varName)
- 栈上实例化非指针对象版本:
内容的提问来源于stack exchange,提问作者Aryan Firouzian
相关产品推荐
相关产品推荐

