INI Manger, quale definizione è più comoda per l'end user?
Inviato: domenica 18 dicembre 2011, 19:38
Sto scrivendo una classe in C++ per gestire i file ini ( o qualsiasi altro file di testo da utilizzare come file di configurazione in un programma).
L'obbiettivo della classe è l'essere la più semplice e comoda possibile da usare per l'utente finale. Le performance NON sono un obiettivo visto la sua natura di utilizzo.
Attualmente la classe supporta solo stream e stringhe wide (ecco il perché dell'uso di wstring e wfstring), in modo da assicurare facilmente il supporto unicode utf-16 in windows (più avanti implementerò il supporto utf8 o la renderò encoding independent )..
Sono indeciso sulla definizione. Attualmente è questa:
I commenti li ho dovuti mettere così o la formattazione andava a remengo nel post..
Ed ecco il dilemma: non so se cambiarla forzando chi la utilizza a specificare sempre il blocco in cui leggere o scrivere (eliminando quindi UseBlock( ) e aggiungendo un parametro nelle funzioni di I/O), oppure fare overloading e aggiungere anche le versioni che specificano il blocco, tuttavia questo complicherebbe leggermente l'utilizzo della classe in quanto raddoppierebbe i metodi (anche se rimarrebbero ben pochi rispetto alle classi std per esempio).
Pertanto secondo voi quale sarebbe la versione più comoda?
L'obbiettivo della classe è l'essere la più semplice e comoda possibile da usare per l'utente finale. Le performance NON sono un obiettivo visto la sua natura di utilizzo.
Attualmente la classe supporta solo stream e stringhe wide (ecco il perché dell'uso di wstring e wfstring), in modo da assicurare facilmente il supporto unicode utf-16 in windows (più avanti implementerò il supporto utf8 o la renderò encoding independent )..
Sono indeciso sulla definizione. Attualmente è questa:
Codice: Seleziona tutto
class IniManager
{
public:
// Default constructor, "Default.ini" is uesed as INI file.
IniManager( );
// Constructor, specify the file name of the ini file.
IniManager( std::wstring fileName );
// Destructor.
virtual ~IniManager( );
// Specify the block, if not called, "[DEFAULT]" block is used.
bool UseBlock( const std::wstring& blockName );
// Read a boolean value from an attribute
bool ReadBoolean( const std::wstring& attribute );
// Read an integer value from an attribute
int ReadInteger( const std::wstring& attribute );
// Read a float value from an attribute
float ReadFloat( const std::wstring& attribute );
// Read a string value from an attribute
std::wstring* ReadString( const std::wstring& attribute );
// Write a boolean attribute value
bool WriteBoolean( const std::wstring& attribute, const bool& value );
// Write an integer attribute value
bool WriteInteger( const std::wstring& attribute, const int& value );
// Write a float attribute value
bool WriteFloat( const std::wstring& attribute, const float& value );
// Write a string attribute value
bool WriteString( const std::wstring& attribute, const std::wstring& value );
private:
struct CheshireCat; // Not defined here ^_^
CheshireCat* smile; // Handle :)
};
Ed ecco il dilemma: non so se cambiarla forzando chi la utilizza a specificare sempre il blocco in cui leggere o scrivere (eliminando quindi UseBlock( ) e aggiungendo un parametro nelle funzioni di I/O), oppure fare overloading e aggiungere anche le versioni che specificano il blocco, tuttavia questo complicherebbe leggermente l'utilizzo della classe in quanto raddoppierebbe i metodi (anche se rimarrebbero ben pochi rispetto alle classi std per esempio).
Pertanto secondo voi quale sarebbe la versione più comoda?