• ベストアンサー

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

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

質問者が選んだベストアンサー

  • ベストアンサー
  • jacta
  • ベストアンサー率26% (845/3158)
回答No.3

オブジェクトの定義時に、名前をコンストラクタに渡すようなマクロでも作れば実現できなくもないのかもしれませんが、一般的には無理です。 また、そもそも名前のないオブジェクト、例えば、newで割り付けたオブエジェクトや一時オブジェクトはどうするのでしょうか?

alna_sag
質問者

お礼

名前をコンストラクタに渡すようなマクロ…試しに作ってみたのですが、 関数内でクラスの変数を生成したときは、いいのですが、 別クラスのメンバ変数として宣言した時はだめですね。 一般的には無理ということがわかりました。 ご回答有難うございました。 因みにこんな形で書いてみました 変数名を取るコンストラクタ CTest::CTest(CString thisName):m_ThisName(thisName){} を作って #define CLASS_DISP_NAME(x,y) x y(#y); でマクロを作って CLASS_DISP_NAME(CTest,test2); で呼出してみました。

その他の回答 (2)

  • salsberry
  • ベストアンサー率69% (495/711)
回答No.2

この例において、testInstはインスタンス名ではなくて変数名。 あるインスタンスがどの変数から指されているかをインスタンス側で知ることはできません。 同じ一つのインスタンスが複数の変数から指されていることもあるわけだし。

alna_sag
質問者

お礼

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

回答No.1

無理。

alna_sag
質問者

お礼

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

関連するQ&A

専門家に質問してみよう