【发布时间】:2021-11-27 16:07:14
【问题描述】:
我们说
class A {
A(string name) {
//....
}
}
所以当对象被创建时:
A* objectNumber324 = new A("objectNumber324");
A* objectNumber325 = new A("objectNumber325");
在我的例子中,由于对象名称很长,我正在寻找宏来将该代码简化为:
CreateA(objectNumber325);
有一些讨论如何将变量名传递给函数here。但这并不完全相同,因为我想创建对象并将其名称传递给构造函数。
【问题讨论】:
-
这几乎不是你真正想做的事情,这看起来很像XY problem。但是,您可以使用与您链接的完全相同的技术;只需编写一个扩展为声明的宏。
-
使用与变量相同的“名称”的用例是什么?那应该解决什么问题?为什么你不能做例如
std::vector<A> objects;然后objects.emplace_back("objectNumber324");(如果你想要顺序编号,可能在循环中)? -
CreateA的定义是什么? -
@Someprogrammerdude 这实际上是在创建一些低级芯片建模,这些对象具有非常相似的名称,例如端口连接,并且数量很多。这些名称应打印在日志中。保持代码和日志可读性的主要原因。
-
那么您绝对应该使用对象向量(或其他一些标准容器,也许
std::unordered_map将“id”映射到对象)而不是不同且单独的变量。