如何在实例化类类型的变量时打印其名称

  • 本文关键字:打印 变量 实例化 类型 c++
  • 更新时间 :
  • 英文 :


我有一个名为 Student 的类,我正在主程序中创建一个实例 Alex。在创建实例 Alex 时,是否可以打印"正在创建 Alex"。如果变量名称为"Joe",则应打印"正在创建 Joe"。

这是我的类定义

class Student
{
    public:
    int rollNo;
    string address;
    Student(int rollNo, string address)
    {
        this.rollNo = rollNo;
        this.address = address;
    }
    //setter , getter functions.
};

在主程序中

Student Alex;
Student Joe;

注意1:是的,我们可以在学生类中使用变量"name",并在实例化时传递名称Alex/Joe,并在构造函数中根据需要打印。但这不是我的情况。我纯粹不想传递 name

没有

宏就无法自动执行此操作,因为C++不支持反射。一种可能性是在呼叫站点上使用宏:

#define CREATE_VARIABLE(type, name) 
    ::std::cout << "Creating " #name " of type " #type << 'n'; 
    type name

用作:

CREATE_VARIABLE(Student, Alex);
CREATE_VARIABLE(Student, Joe){joeRollNo, joeAddress};

否,因为变量名是表达式的一部分,该表达式在声明它的范围内引用您的对象。

它对对象本身不可用,甚至可能在运行时不存在,无论如何,创建不被任何命名表达式引用的匿名对象或由多个不同的命名表达式引用的对象在C++是微不足道的。

当然,您可以显式执行此操作,也可以像 Vittorio 所示使用宏执行此操作。

您无法在创建时打印变量的名称。而且真的不会是嘿嘿。考虑以下代码:

Student Alex;
Student Joe;
Student &some_student = Alex;
Student *another_student = &Alex;
Student Alex;
void print_students_address(const Student &student);

每行中应打印什么名称?难道您不想用地址而不是变量的名称打印学生姓名:"学生"吗?

正确的解决方案是向 Student 类添加一个成员"字符串名称"。

最新更新