在C++中使用常量变量
本文关键字:常量 变量 C++ | 更新日期: 2023-09-27 18:27:50
我在Visual Studio中的C++项目中有一个C++文件。C++文件有一个片段,其中一些应用程序使用system
运行
system("Files''tx1");
system("Files''tx2");
system("Files''tx3");
system("Files''tx4");
我想用一些可以在一个地方更改的常量变量来替换"Files"常量。类似于我们在C#中使用app.config文件等所做的操作。
直接对常数进行硬编码不是一个好的做法。与C#项目不同,C++项目没有设置文件。那么,在这种情况下我应该怎么做,有什么建议吗?
如果您想使用编译时方法(就像C#中的app.config
一样),可以使用defines。
conf.h
#define FILES "mypath"
impl.c
#include "conf.h"
...
system(FILES "tx1");
当您喜欢运行时方法时,配置文件有许多格式/库。
由于没有类似于app.config文件的机制,您将不得不自行旋转。有很多框架可以做到这一点。
一种选择是使用boost属性树库。这允许将配置数据轻松串行化为各种文件格式。
但是,您仍然需要创建一个全局对象来访问这些值。
您可以简单地编写自己的小型设置解析器,这并不难,或者使用一些预制库来读取某种配置文件(例如,您可以使用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));
...