私は__FILE__
と__LINE__
マクロをコンストラクタでデフォルトのパラメータとして使用しようとしていますが、マクロを取得して正しいファイルを使用できないようです。彼らは私のヘッダーファイルから拡張し続けます。C++のコンストラクタで__FILE__と__LINE__をデフォルトパラメータとして使用するにはどうすればよいですか?
さらに詳しく:オブジェクトがクラスのメンバーとしてインスタンス化されている場所からファイルと行番号を取得したいと思います。しかし、私はオブジェクトを使用するたびにパラメータを手で入力する必要はありません。私はこれを行う方法があることを知っているが、私の人生はそれを把握することはできません。私のヘッダファイルで
:彼らは私のヘッダファイルからだかのように
mnNumber(float x, const char* filename = __FILE__, int linenumber = __LINE__):
value(x), mFileName(filename), mFunctionName(nullptr), mLineNumber( linenumber), mID(0)
しかし、FILEとLINE実際、ない拡大を取得私が現在やっていることは、次があります場所私はmnNumberを使用します。
なぜ私がこれをやりたいのかという質問に答えるために、コードを自分のコードページとして読んでみたいです。私が使用している特定の値はマネージャーに登録されており、その値はエンド・ユーザーによって編集できるようになっています。エンドユーザーが値の編集を完了すると、その値はコードページに書き戻されます。だから、私は価値がどこから来たのか知る必要があります。また、エンドユーザーは、この値を再度編集する必要がないと言って、そのボタンをクリックすると、値がmnNumberからfloatに変換され、コードページの型が浮動小数点数として書き換えられます。または、うまくいけば...。
私のアドバイスはありますか?
短い答え:あなたは好きなように使用することはできません。コンストラクタのソースコードが記述されている場所に展開されます。つまり、プリプロセッサの動作です。これは、 "関数パラメータ"などについて何も知らないテキスト処理エンジンです。コンパイラは、関数や引数などを実際に扱うものは、プリプロセッサが終了した後に来ます。 – Xeo
コンストラクタの代わりにマクロを使用する必要があります。他の方法では機能しません。つまり、汎用コードでは完全に失敗します。 –
私のマネージャーはシングルトンですか?スマートなソリューション! – steffen