Ini解析器,代码如下:#pragma once
#include <string>
#include <map>
#include <iostream>
using namespace std;
class Value
public:
Value();
Value(bool value);
Value(int value);
Value(double value);
Value(const char* value);
Value(const string& value);
void operator=(bool value);
void operator=(int value);
void operator=(double value);
void operator=(const char* value);
void operator=(const string& value);
operator bool() const;
operator int() const;
operator double() const;
operator string() const;
private:
string m_value;
typedef std::map<string, Value> Section;
class IniFile {
public:
IniFile() = default;
bool load(const string& filename);
Value& get(const string& section, const string& key);
void set(const string& section, const string& key, bool value);
void set(const string& section, const string& key, int value);
void set(const string& section, const string& key, double value);
void set(const string& section, const string& key, const char* value);
void set(const string& section, const string& key, const string& value); // 修正:由指针改为引用
void set(const string& section, const string& key, const Value& value);
bool has(const string& section, const string& key) const; // 优化:加 const
bool has(const string& section) const; // 优化:加 const
void remove(const string& section, const string& key);
void remove(const string& section);
void clear();
void show() const; // 优化:加 const
bool save(const string& filename);
string str() const; // 优化:加 const
Section& operator[](const string& section) {
return m_sections[section];
private:
string trim(string s);
private:
string m_filename;
std::map<string, Section> m_sections;
};#include "IniFile.h"
#include <sstream>
#include <fstream>
#include <cstdlib>
Value::Value(bool value) {
m_value = value ? "true" : "false";
Value::Value(int value) {
m_value = std::to_string(value); // 优化:相比 stringstream,to_string 更高效
Value::Value(double value) {
m_value = std::to_string(value);
void Value::operator=(bool value) {
m_value = value ? "true" : "false";
void Value::operator=(int value) {
m_value = std::to_string(value);
void Value::operator=(double value) {
m_value = std::to_string(value);
void Value::operator=(const char* value) {
m_value = value ? value : "";
void Value::operator=(const string& value) {
m_value = value;
Value::operator bool() const {
return m_value == "true" || m_value == "1";
Value::operator int() const {
return m_value.empty() ? 0 : std::atoi(m_value.c_str());
Value::operator double() const {
return m_value.empty() ? 0.0 : std::atof(m_value.c_str());
Valu
...(已截断)
---
来源: 看雪论坛
原文链接: https://bbs.kanxue.com/thread-291423.htm
[原创]Ini解析器
320 浏览
0 回复
暂无回复,快来抢沙发吧!