|
|
1
8
这里有几个问题:
我见过C++库破解堆栈(顺便说一下,这是非常不可移植的),因此代码可以像“谁叫我”那样来计算数据,但我多年来没有使用过这些东西。 |
|
2
3
不,没有办法。C++没有反射,它
C++直接编译成机器代码,它不再包含源代码中的任何标识符。当然,您可以将“变量名”存储在成员字段中(前提是对象在单个名称下引用…)。 |
|
|
3
3
不,对象名只存在于源代码中。一旦编译,对象引用就是一个内存偏移量。如果你想知道变量名,你必须在某个地方有一个字符串来描述它。 在具有内省机制(如反射)的语言中,获取变量名的功能非常有限,而且根本不广泛可用。即使是在C#——一种娘娘腔的男人语言——中,要得到一个变量名,你也需要使用一个奇怪的C#3.5特性,称为投影,然后跳转通过hoops来提取它。即使这样,你也必须为它编程——它不仅在代码的任何一点上都是可用的。 经过一番思考后,您提出的问题(从成员函数获取对象的名称)是
在上面的示例中,我们有一个
在C语言中,可以使用匿名类和反射来获取变量名。这样做的方法是相当尴尬的,如果你试图用这个来向某人展示一些东西,现在就放弃,因为你们都会感到困惑。该技术使用了一些新的功能,包括匿名类、投影、扩展方法和反射。
|
|
|
4
0
好吧,你的问题似乎有点不清楚,但假设你想在它的成员函数中打印出类的名称,这是很有可能的。 typeid 命令。这将在运行时为类类型的对象提取一个接近人类可读的名称。但是,您不能依赖此名称在不同平台上保持一致,即您得到的名称可能因平台而异(我从下面的示例代码中得到的是“4ObjA”)。
|
|
|
5
0
你的问题不是很清楚-你想知道这个方法所属的对象吗?或者调用成员函数的方法的名称?哦,还有别的吗。。?
你不能理智地得到
如果要获取调用该方法的方法的名称,则必须检查调用堆栈,例如在Python中使用
我想这在其他语言中并不是那么容易 同样,您想做这样一件事的情况很少,通常仅限于代码覆盖工具和调试器之类的内省繁重的事情 |
|
|
6
0
正如其他文章所述,在运行时没有直接的方法来访问您在代码中选择的变量名标识符——从机器的角度来看根本不需要它。然而,在Ruby中,要了解调用者在其结构方面的细节并不重要:
你可以在C++中做类似的事情
|
|
|
7
0
|
|
|
simply lemon · python上链表的添加方法 2 年前 |
|
|
Anonymous · 为什么在这个例子中self和类名的用法不同? 2 年前 |
|
|
P N Singh · 在CPP Oops中调用对象而不创建它 2 年前 |
|
|
Muthuraj · 如何创建一个通用工厂来创建某种类型的实例[重复] 2 年前 |
|
|
Andy Votava · 从父类定义调用学生方法 2 年前 |