Mi sto facendo una mia lib comene x tutti i miei programmi, che sia il + possibili portabile.
Sto facendo la generica classe CParse per caricare files di conf.
Questa sara la base x CCOnfigParse.
codice:
// Parse.hpp
#ifndef PARSE_HPP_
#define PARSE_HPP_
#include "Define.hpp"
#include <iostream>
#include <fstream>
#include <sstream>
#include <string>
#include <cstring>

using namespace std;

N_BEG
/**
  Name:CParse  \n
  Author:Kleidemos \n
  Description:Parserizza una configurazione generica  \n
  Indicata come base per sviluppi \n
*/
class CParse
{
    friend CParse& operator+=(CParse &p, string _add);
        public:
                CParse() { _buf = " "; };
                CParse(string buf){ _buf = buf; };
                CParse(char * buf){ _buf = buf; };
                ~CParse();
                /// Read a generic config
                void Read(istream &is = cin, string * buf_r = "");
                /// Write a generic config
                void Write(ostream &os = cout, string buf = " ");
                /// Add a text
                inline void Add(string add) { _buf += add; };
                /// Find a info
                string Find(string info);
        private:
                string _buf;        
};
N_END

#endif
Questo è la sua dichiarazione.
Ho implementato +=, Write, Add.
Ma nn so come implementare Find.
Questo metodo dovrebbe cercarmi nel buffer caricato con Read(ancora da sistemare) un determinato valore(tipo file ini opt=valore).
Ma nn so come implementarla
Al momento ho implementato solo un metodo per sapere se è un files di config o no.
codice:
 
/**
  Name:Find\n
  ReturnL'informazione trovata\n
  Argoments:L' informazione da cercare\n
  Description:Find a info\n
*/
string CParse::Find(string info)
{
    const string CONFIG_MARK = "[CONFIG]";
    if(_buf.substr(0, CONFIG_MARK.size()) == CONFIG_MARK){
       /// TODO
       string::size_type val;
       val = _buf.find(info, 0 );
       if(val != string::npos){// trovata
              string ret;
              
       }else{// non trovata
              return "Error!\n";
       }

    }else{
        return "Error!\n";
    }
}