在C ++中使用常量变量

时间:2012-03-14 10:48:49

标签: c# c++

我在Visual Studio中的C ++项目中有一个C ++文件。 C ++文件有一个片段,其中一些应用程序使用system

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

我想用一些常量变量替换“Files”常量,这些常量变量可以在一个地方更改。类似我们在C#中用app.config文件做的事情。
直接硬编码常量不是一个好习惯。与C#项目不同,C ++项目没有设置文件。那么,在这种情况下我应该做些什么呢?

5 个答案:

答案 0 :(得分:1)

由于app.config文件没有类似的机制,你必须自己旋转。有很多框架可以做到这一点。

一种选择是使用boost property tree library。这样可以轻松地将配置数据序列化为各种文件格式。

但是,您仍然需要创建一个用于访问这些值的全局对象。

答案 1 :(得分:1)

如果您想使用编译时方法(与C#中的app.config一样),您可以使用定义。

conf.h

#define FILES "mypath"

impl.c

#include "conf.h"
...

system(FILES "tx1");

当您更喜欢运行时方法时,配置文件有许多格式/库。

答案 2 :(得分:0)

您可以简单地编写自己的小设置解析器,这不是那么难,或者使用一些预制库来读取某种配置文件(例如,您可以使用Windows API来读取/写入ini文件,或者您可以使用某种类型of json / xml library)。

我个人更喜欢使用pugixml这样的东西。

答案 3 :(得分: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());

答案 4 :(得分:-1)

而不是常量,在给定最低要求的数据的情况下放置一个返回适当值的内联函数:例如

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

并致电

system(FileNum(1));
...
相关问题