2012-03-14 16 views
0

Visual StudioのC++プロジェクトにC++ファイルがあります。 C++ファイルには、いくつかのアプリケーションは、私は、単一の場所で変更することができ、いくつかの定数変数で「ファイル」定数を置き換えたいsystemC++で定数変数を使用する

system("Files\\tx1"); 
system("Files\\tx2"); 
system("Files\\tx3"); 
system("Files\\tx4"); 

使用して実行されている、請求スニペットを持っています。私たちがapp.configファイルなどでC#で行うことのようなもの
定数を直接ハードコーディングするのは良い方法ではありません。 C++プロジェクトには、C#プロジェクトとは異なり、設定ファイルがありません。だから、私はこの場合に何をするべきですか?

+2

あなたのタイトルは少し誤解を招くようです。 – Nick

答えて

1

コンパイル時のアプローチ(C#のapp.configのように)を使用する場合は、定義を使用できます。

conf.h

#define FILES "mypath" 

impl.c

#include "conf.h" 
... 

system(FILES "tx1"); 

実行時のアプローチを好む、コンフィギュレーション・ファイルのための多数のフォーマット/ライブラリがあります。

+2

私はapp.configが実行時に変更可能であることを確信しています。 – Nick

1

app.configファイルと似たメカニズムがないため、独自のスピンが必要です。これを行うためのフレームワークはたくさんあります。

1つのオプションはboost property tree libraryです。これにより、構成データをさまざまなファイル形式に簡単にシリアル化できます。

ただし、これらの値にアクセスするためのグローバルオブジェクトを作成する必要があります。

0

あなたは、それほど難しいものではない独自の小さな設定パーサーを書くか、いくつかの種類の設定ファイルを読み込むためにいくつかのpremadeライブラリを使用することができます(たとえば、Windows APIを使用してiniファイルを読み書きするか、 json/xmlライブラリの一種)。

私は個人的にこのようなものにpugixmlを使用することをお勧めします。

+0

なぜWinAPIとストリームを使用するのですか?なぜXMLの上にテキスト? –

+0

複雑さと編集可能性(sp?)によっては、ホイールを再改造するよりも、より簡単に行うこともできます(1つのパスがすべて読み込みになるとは限りません)。 – Mario

+0

ああ、iniファイルを具体的に読み書きするWindows APIはありますか?私が知っているのは、Wind95程度で廃止されているのは知っているだけですが、気づいていない人がいるかもしれません。 –

0

私は私のためにこれをしたクラスを作成します。

class Path 
{ 
private: 
    static const std::string prefix_; 

public: 
    static std::string get(const std::string& file) 
    { 
     return prefix_ + '\\' + file; 
    }; 
}; // eo class Path 

た.cpp

const std::string Path::prefix_ = "Files"; 

は今、それは他のどこでも使いやすい:

system(Path::get("tx1").c_str()); 
system(Path::get("tx2").c_str()); 
system(Path::get("tx3").c_str()); 
system(Path::get("tx4").c_str()); 
+0

、どのように初期化されますか? –

+0

@MooingDuckについては、prefix_に名前が付いている.cppファイルを参照してください。これは完全に静的なクラスです。 –

-1

の代わりに、最低限必要なデータがあれば、適切な値を返すインライン関数を配置します。たとえば、

inline const char *FileNum(int n) { 
static char buf[100]; 
sprintf(buf, "Files\\txt%d", n); 
return buf; 
} 

と呼ん

system(FileNum(1)); 
... 
関連する問題