c*****s 发帖数: 49 | 1 初学,应该是特别基本的问题,但找不到理想的方法.
在一个class的member function中有没有任何方法可以显示invoke这个function的
object的name?
需要这个是因为在handle exception的时候需要显示对哪个object的操作导致
exception(习题要求 Your exceptions should pass along the identity of the
stack that caused the exception)
唯一能想到的就是stack class里加个stack_name data member. Construct的时候保证
和object name一致.但感觉这个方法太不智能了.有没有更好,更常用的方法?
非常感谢! |
X****r 发帖数: 3557 | 2 "identity of the stack" 不见得就是一定要变量名。一个对象的地址就是它的
unique identifier.
【在 c*****s 的大作中提到】 : 初学,应该是特别基本的问题,但找不到理想的方法. : 在一个class的member function中有没有任何方法可以显示invoke这个function的 : object的name? : 需要这个是因为在handle exception的时候需要显示对哪个object的操作导致 : exception(习题要求 Your exceptions should pass along the identity of the : stack that caused the exception) : 唯一能想到的就是stack class里加个stack_name data member. Construct的时候保证 : 和object name一致.但感觉这个方法太不智能了.有没有更好,更常用的方法? : 非常感谢!
|
c*****s 发帖数: 49 | 3 Ah. Just pass "this" to pop_empty.And the name can be displayed in "catch" which is in main().
Thanks!
【在 X****r 的大作中提到】 : "identity of the stack" 不见得就是一定要变量名。一个对象的地址就是它的 : unique identifier.
|
s*******e 发帖数: 432 | 4 you can use RTTI (run-time type information) you can google to see how to
use it |
c*****s 发帖数: 49 | 5 Thank you for your answer. However, after reading some info online, it seems
RTTI deals with the type of the object only (esp. for hiearchies of
inherited classes). I could not figure out how to use it to infer the object
name. Please let me know if I'm missing something. Thanks.
【在 s*******e 的大作中提到】 : you can use RTTI (run-time type information) you can google to see how to : use it
|
t****t 发帖数: 6806 | 6 for one thing, a c++ object does not have to have a name. so the "identity"
must not be "name".
【在 c*****s 的大作中提到】 : 初学,应该是特别基本的问题,但找不到理想的方法. : 在一个class的member function中有没有任何方法可以显示invoke这个function的 : object的name? : 需要这个是因为在handle exception的时候需要显示对哪个object的操作导致 : exception(习题要求 Your exceptions should pass along the identity of the : stack that caused the exception) : 唯一能想到的就是stack class里加个stack_name data member. Construct的时候保证 : 和object name一致.但感觉这个方法太不智能了.有没有更好,更常用的方法? : 非常感谢!
|
b******n 发帖数: 592 | 7 加一个data member的方法没有问题。你可以提供一些MACRO简化declaration。感觉
你需要的不是具体的class的名字,而是object的名字,用来更好的显示错误信息,所以
这样算是唯一的办法了。再有就是在catch的时候加上合适的信息也可以。
【在 c*****s 的大作中提到】 : 初学,应该是特别基本的问题,但找不到理想的方法. : 在一个class的member function中有没有任何方法可以显示invoke这个function的 : object的name? : 需要这个是因为在handle exception的时候需要显示对哪个object的操作导致 : exception(习题要求 Your exceptions should pass along the identity of the : stack that caused the exception) : 唯一能想到的就是stack class里加个stack_name data member. Construct的时候保证 : 和object name一致.但感觉这个方法太不智能了.有没有更好,更常用的方法? : 非常感谢!
|
c*****s 发帖数: 49 | 8 Thanks all for your answers. Indeed I need to pass something else other than the object name.
blueivan, you are right, I do need a data member -- found some lecture notes
used the same method.
I later realize that even within "catch", I have no way to display the
object name even the object address has been passed by exception. Then I
realize in reality, the identifier for the object is always some attribute,
not the object name (or address). This attribute is what should be printed
out in the error msg instead of the object name in the program. Now, adding
the data member makes sense.
所以
【在 b******n 的大作中提到】 : 加一个data member的方法没有问题。你可以提供一些MACRO简化declaration。感觉 : 你需要的不是具体的class的名字,而是object的名字,用来更好的显示错误信息,所以 : 这样算是唯一的办法了。再有就是在catch的时候加上合适的信息也可以。
|