论坛首页 开源情报交流区 阅读主题

[原创]Ini解析器

320 浏览 0 回复
#1 楼主 2026-06-01 21:08:50
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

暂无回复,快来抢沙发吧!

请登录后参与讨论

立即登录 注册账号