私はロギング/トレースユニットに取り組んでいます(そして、既存のものを指さないでください、これは結果と同じくらい経験のためです)。
実行時の呼び出しスタックトレースを取得するにはTraceObject
、関数が最初に入力されたときに、現在のクラスと関数の情報を保持するインスタンスを構築するという考え方があります。やや似ています:
TraceObject to( "MyClass", "myClassFunction" );
スレッドごとのスタックをTraceObject
プッシュするコンストラクター、デストラクタはそれを再びポップします。this
したがって、スタックはコールスタックを照会できます。
私はこれを満足のいくように機能させました。ただし、小さなスニッチがあります:オブジェクトto
。設計上、その名前で呼ばれることはありません。したがって、名前を付ける必要はありません。少なくとも、クライアントが使用する識別子(または、_
プレフィックスの場合は実装)と衝突する可能性のある名前を付ける必要はありません。
tl; dr
スタック上に匿名の非一時オブジェクト(つまり、関数が戻るまで存続するが、識別子を持たないオブジェクト)を作成することは可能ですか?もしそうなら、それはどのように行われますか?