たとえば、プログラム ファイル main.cpp の 4 つの部分にこのコード行があるとします。
ifstream fin; fin.open("filename.txt")
しかし、これら4つの場所すべてでこれらすべてのファイル名を変更したくありません。
これのグローバル変数名を作成するにはどうすればよいですか? filenames.txt では動作が異なりますか?
たとえば、プログラム ファイル main.cpp の 4 つの部分にこのコード行があるとします。
ifstream fin; fin.open("filename.txt")
しかし、これら4つの場所すべてでこれらすべてのファイル名を変更したくありません。
これのグローバル変数名を作成するにはどうすればよいですか? filenames.txt では動作が異なりますか?
おそらく、次のようなグローバル変数を試しました。
const std::string filename = "filename.txt";
そして、次のように初期化しようとしましifstream
た:
ifstream fin; fin.open(filename);
そしてそれはあなたにとってうまくいきませんでした。これは、2011 標準をサポートする C++ コンパイラまたはライブラリがないことが原因である可能性があります。そのようなコンパイラがあれば、問題なく動作します。ただし、そうしない場合は、C スタイルの文字列をifstream
コンストラクターに渡す必要があります。
ifstream fin; fin.open(filename.c_str());
これが私がそれについて行く方法です。
アプリケーション構成ファイルのパスを指定するコマンド ライン引数を渡します。アプリケーションが読み込まれると、この構成ファイルが解析され、ファイル名などの項目のすべての値が保存されます。要求に応じてこれらの値を格納および配信するクラスまたはグローバル構造を用意します。例えば:
fin.open(AppConfig.get("filename")); // if the AppConfig is a class.
fin.open(AppConfig["filename"]); // if AppConfig was a map like structure.
この種のデータ ドリブン開発は良い習慣です。使用しているファイルが 1 つだけの場合は、ファイルの先頭に定数名を定義するだけで済みます。
const char* FILENAME = "my file.txt"; // or
#define FILENAME "my file.txt"
毎回定数を使用します。
fin.open(FILENAME); // use this repeatedly
グローバル const 変数を定義できます
const char* fileName = "filename.txt";
また
const std::string fileName = "filename.txt";
変更できないグローバル変数は悪くありません。次に使用法:
ifstream fin(fileName);