- ベストアンサー
クラスのインスタンス名をクラス内で取得できますか?
クラスのインスタンス名をクラス内で取得できますか? 今VC++6.0を使っています。例として下記のクラスのコンストラクタで CTest::CTest() { TRACE("%s",typeid(this).name()); } としておいて、 別なクラスで CTest testInst; を生成すると デバッグエリアに 「class CTest *」 と表示することはできました。 これが出来るのなら、インスタンス名 testInst をCTestクラスの内部から 取得することは出来ないのかと思ったのですが、 取得することは可能なのでしょうか?
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
オブジェクトの定義時に、名前をコンストラクタに渡すようなマクロでも作れば実現できなくもないのかもしれませんが、一般的には無理です。 また、そもそも名前のないオブジェクト、例えば、newで割り付けたオブエジェクトや一時オブジェクトはどうするのでしょうか?
その他の回答 (2)
- salsberry
- ベストアンサー率69% (495/711)
回答No.2
この例において、testInstはインスタンス名ではなくて変数名。 あるインスタンスがどの変数から指されているかをインスタンス側で知ることはできません。 同じ一つのインスタンスが複数の変数から指されていることもあるわけだし。
質問者
お礼
出来ないことがわかっただけでもすっきりしました。 回答有難うございます。
- επιστημη(@episteme)
- ベストアンサー率46% (546/1184)
回答No.1
無理。
質問者
お礼
うすうす無理そうだと思ってたのですが、やっぱり無理なんですね 有難うございます。
お礼
名前をコンストラクタに渡すようなマクロ…試しに作ってみたのですが、 関数内でクラスの変数を生成したときは、いいのですが、 別クラスのメンバ変数として宣言した時はだめですね。 一般的には無理ということがわかりました。 ご回答有難うございました。 因みにこんな形で書いてみました 変数名を取るコンストラクタ CTest::CTest(CString thisName):m_ThisName(thisName){} を作って #define CLASS_DISP_NAME(x,y) x y(#y); でマクロを作って CLASS_DISP_NAME(CTest,test2); で呼出してみました。