我有一个名为Student的类,我正在主程序中创建一个实例Alex。在创建实例Alex时,是否可以打印"Alex正在创建“。如果变量名为"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;
Note1:是的,我们可以在学生类中有变量" name“,并在实例化它的同时传递名称Alex/Joe,并根据需要在构造函数中打印。但这不是我的案子。我纯粹不想传递名字
发布于 2019-07-11 10:47:11
没有宏就无法自动完成这一任务,因为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};
发布于 2019-07-11 10:49:20
否,因为变量名称是表达式的一部分,该表达式引用声明对象的作用域中的对象。
它对对象本身是不可用的,甚至可能在运行时不存在,而且无论如何,在C++中创建任何命名表达式都没有引用的匿名对象,或者由多个不同的命名表达式引用的对象是很简单的。
当然,您可以显式地这样做,或者像Vittorio所显示的那样使用宏。
发布于 2019-07-11 12:19:03
无法在创建时打印变量的名称。也不会很有帮助。考虑一下这一守则:
Student Alex;
Student Joe;
Student &some_student = Alex;
Student *another_student = &Alex;
Student Alex;
void print_students_address(const Student &student);
这些行中的每一行都应该打印什么名称?你不想用地址来打印学生的名字而不是变量的名字:“学生”吗?
正确的解决方案是将一个成员“字符串名”添加到Student类中。
https://stackoverflow.com/questions/56987393
复制相似问题