INI Manger, quale definizione è più comoda per l'end user?

Da JAVA a C# passando per PHP, SQL ed HTML
Rispondi
Avatar utente
Alessio89
Messaggi: 8098
Iscritto il: martedì 29 novembre 2011, 23:47

INI Manger, quale definizione è più comoda per l'end user?

Messaggio da Alessio89 »

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:

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 :)
};
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?

Avatar utente
Alessio89
Messaggi: 8098
Iscritto il: martedì 29 novembre 2011, 23:47

Re: INI Manger, quale definizione è più comoda per l'end use

Messaggio da Alessio89 »

per dare un'idea di come verrebbe strutturato il file ini:

Codice: Seleziona tutto

[BLOCCO]
attributo = valore;
altroAttributo = valore;

Rispondi