ギリギリ行けるお一人様のライン

クラスのインスタンス名をクラス内で取得できますか?

今VC++6.0を使っています。例として下記のクラスのコンストラクタで
CTest::CTest() { TRACE("%s",typeid(this).name()); }
としておいて、
別なクラスで CTest testInst; を生成すると
デバッグエリアに 「class CTest *」 と表示することはできました。
これが出来るのなら、インスタンス名 testInst をCTestクラスの内部から
取得することは出来ないのかと思ったのですが、
取得することは可能なのでしょうか?

A 回答 (3件)

オブジェクトの定義時に、名前をコンストラクタに渡すようなマクロでも作れば実現できなくもないのかもしれませんが、一般的には無理です。


また、そもそも名前のないオブジェクト、例えば、newで割り付けたオブエジェクトや一時オブジェクトはどうするのでしょうか?
    • good
    • 0
この回答へのお礼

名前をコンストラクタに渡すようなマクロ…試しに作ってみたのですが、
関数内でクラスの変数を生成したときは、いいのですが、
別クラスのメンバ変数として宣言した時はだめですね。
一般的には無理ということがわかりました。
ご回答有難うございました。

因みにこんな形で書いてみました
変数名を取るコンストラクタ
CTest::CTest(CString thisName):m_ThisName(thisName){}
を作って
#define CLASS_DISP_NAME(x,y) x y(#y);
でマクロを作って
CLASS_DISP_NAME(CTest,test2);
で呼出してみました。

お礼日時:2010/05/31 09:26

この例において、testInstはインスタンス名ではなくて変数名。


あるインスタンスがどの変数から指されているかをインスタンス側で知ることはできません。
同じ一つのインスタンスが複数の変数から指されていることもあるわけだし。
    • good
    • 0
この回答へのお礼

出来ないことがわかっただけでもすっきりしました。
回答有難うございます。

お礼日時:2010/05/31 08:22

無理。

    • good
    • 0
この回答へのお礼

うすうす無理そうだと思ってたのですが、やっぱり無理なんですね
有難うございます。

お礼日時:2010/05/31 08:20

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


おすすめ情報