簡體   English   中英

在C ++中使用常量

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM