C++使用config类从txt文件中设置变量值
C++ Setting Variable values from txt file using config class
我试图弄清楚如何从txt文件或cfg文件中设置变量值,现在我发现这个类很好用。
它非常适合我的需要,但唯一的问题是它只接受字符串和双精度,但我需要设置int/foat值。
那么,有人能告诉我如何修改这个类,使它同时使用整数和浮点吗?
#include "Chameleon.h"
class ConfigFile {
std::map<std::string,Chameleon> content_;
public:
ConfigFile(std::string const& configFile);
Chameleon const& Value(std::string const& section, std::string const& entry) const;
Chameleon const& Value(std::string const& section, std::string const& entry, double value);
Chameleon const& Value(std::string const& section, std::string const& entry, std::string const& value);
};
这里是ConfigFile.cpp
std::string trim(std::string const& source, char const* delims = " trn") {
std::string result(source);
std::string::size_type index = result.find_last_not_of(delims);
if(index != std::string::npos)
result.erase(++index);
index = result.find_first_not_of(delims);
if(index != std::string::npos)
result.erase(0, index);
else
result.erase();
return result;
}
ConfigFile::ConfigFile(std::string const& configFile) {
std::ifstream file(configFile.c_str());
std::string line;
std::string name;
std::string value;
std::string inSection;
int posEqual;
while (std::getline(file,line)) {
if (! line.length()) continue;
if (line[0] == '#') continue;
if (line[0] == ';') continue;
if (line[0] == '[') {
inSection=trim(line.substr(1,line.find(']')-1));
continue;
}
posEqual=line.find('=');
name = trim(line.substr(0,posEqual));
value = trim(line.substr(posEqual+1));
content_[inSection+'/'+name]=Chameleon(value);
}
}
Chameleon const& ConfigFile::Value(std::string const& section, std::string const& entry) const {
std::map<std::string,Chameleon>::const_iterator ci = content_.find(section + '/' + entry);
if (ci == content_.end()) throw "does not exist";
return ci->second;
}
Chameleon const& ConfigFile::Value(std::string const& section, std::string const& entry, double value) {
try {
return Value(section, entry);
} catch(const char *) {
return content_.insert(std::make_pair(section+'/'+entry, Chameleon(value))).first->second;
}
}
Chameleon const& ConfigFile::Value(std::string const& section, std::string const& entry, std::string const& value) {
try {
return Value(section, entry);
} catch(const char *) {
return content_.insert(std::make_pair(section+'/'+entry, Chameleon(value))).first->second;
}
}
您可以执行一种称为类型转换的操作。将数据分配给double,然后将其更改为int。
相关文章:
- 使用变量值作为 PlaySound 中的路径
- 通过指针偏移量访问结构变量值
- 变量值在 C++ 中的 glutIdleFunc() 中未递增
- 更新 #ifdef 中的现有变量值?
- 尝试更改 main 函数内的全局变量值时出现编译错误 C++.
- 通过 Rcpp 和 bit64 R 包将最大的int64_t变量值从 C++ 传递到 R
- 如何使用 IRBuilder 更新 LLVM IR 中的全局变量值?
- 更改已在运行的程序的变量值
- 在 Xcode 中使用后对外部变量值进行初始化
- C++整数变量值
- 变量值,在三元运算符之后
- 如何获得对不同类的引用,以便从所述类内部获得变量值
- Java应用程序的JNI-c++变量值
- 如何固定从传感器获得的变量值
- 离开方法时重置变量值
- 在宏函数C++中设置宏变量值
- 使用设置精度更新变量值
- ROS启动文件以设置变量值
- 在c++中使用两个宏设置变量值
- C++使用config类从txt文件中设置变量值