実行時にtypeid(this).name()を使用して、RTTIが有効であると仮定すると、現在のクラス名を取得できます。実行時にC++で基本クラス名を取得する方法はありますか?
「this」の基本クラスの名前を取得したいと考えています。それは可能ですか?私は違いがある場合は、複数の継承を使用していません。
実行時にtypeid(this).name()を使用して、RTTIが有効であると仮定すると、現在のクラス名を取得できます。実行時にC++で基本クラス名を取得する方法はありますか?
「this」の基本クラスの名前を取得したいと考えています。それは可能ですか?私は違いがある場合は、複数の継承を使用していません。
No sir。ごめんなさい。このようにクラス名を取得する方法は、実装に依存します。私の実装では、私は混乱した名前を取得します。
いいえ、そうではありません、あなたがこの機能を必要とする理由は、怪しげな:)
が来たら、OPが達成したいと思っているものについて、あいまいなユースケースがあるかもしれません。 –
私がこれを望んだ理由は、レガシーシステムのフレームワークで既存の呼び出しを使用してデバッグ出力を提供することでした。クラス名とベースクラス名はコード内で利用できますが、約300のクラスが含まれているので、私は1つのグローバル検索で置き換え可能なものを探していました。 –
プラス、私はあなたがに正確な値私の知る限り(あなたのクラス名を与えることtypeid(this).name()
に数えることができるとは思わないです返されるのは実装定義です)。
C++の考え方は明示的に求めない限り、情報を確実に取得することができないため、信頼性の高い情報はどこにも格納されないため、確実に取得することはできません。
なぜそれが必要ですか?通常、RTTIが必要なときは、設計上の問題の兆候です。 – Dima
私がこれを望んだ理由は、レガシーシステムのフレームワークで既存の呼び出しを使用してデバッグ出力を提供することでした。クラス名とベースクラス名はコード内で使用できますが、約300クラスが含まれているので、私は1つのグローバル検索と置換で使用できるものを探していました。これは顧客の要求です。私は全く別の方法でその問題を解決しましたが、レガシーソフトウェアとのバイナリ互換性の制約が私の解決を妨げています。 –