[英]Using a constant variable in C++
我在Visual Studio的C ++項目中有一個C ++文件。 C ++文件具有一個片段,其中某些應用程序是使用system
運行的
system("Files\\tx1");
system("Files\\tx2");
system("Files\\tx3");
system("Files\\tx4");
我想用一些可以在單個位置更改的常量變量替換“文件”常量。 類似於我們將在C#中使用app.config文件等執行的操作。
直接對常量進行硬編碼不是一個好習慣。 與C#項目不同,C ++項目沒有設置文件。 那么,在這種情況下我有什么建議呢?
由於沒有類似於app.config文件的機制,因此您必須旋轉自己的文件。 有很多框架可以做到這一點。
一種選擇是使用boost屬性樹庫 。 這樣可以輕松地將配置數據序列化為各種文件格式。
但是,您仍然必須創建一個全局對象來訪問這些值。
如果要使用編譯時方法(與C#中的app.config
),則可以使用define。
配置文件
#define FILES "mypath"
隱含的
#include "conf.h"
...
system(FILES "tx1");
當您更喜歡運行時方法時,配置文件有多種格式/庫。
您可以簡單地編寫自己的小型設置解析器,但並不難,也可以使用一些預制的庫來讀取某種配置文件(例如,您可以使用Windows API來讀取/寫入ini文件,也可以使用某種json / xml庫)。
我個人更喜歡使用pugixml這樣的東西。
我將創建一個為我完成此操作的類:
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());
代替一個常量,放置一個內聯函數,該函數返回給定的最低要求數據的適當值:例如
inline const char *FileNum(int n) {
static char buf[100];
sprintf(buf, "Files\\txt%d", n);
return buf;
}
並打電話
system(FileNum(1));
...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.