N
@HannsW: argc und argv gibt es immer noch. Und wenn ich Skippy richtig verstehe, kann der Nutzer neue Fileextensions in seinem Programm registrieren. (Ähnlich dem Registrieren von Dateiendungen in Windows)
@Skippy: Dein Code funktioniert so nicht. Du vergleichst Pointer statt Strings. Wenn Du mit char* arbeitest, musst Du strcmp (oder ähnliche Routinen verwenden).
Wenn Du davon ausgehst, dass Du nur wenige Extensions hast, dann ist ein map unsinnig. In Deinem Beispiel nützt Dir die map wenig, da kannst Du auch linear durch einen Vektor suchen.
Wenn Du dagegen erwartest, dass sehr viele Extensions registriert sind, dann macht eine map Sinn und ist mit Sicherheit eine schnelle Lösung.
Beispiel (inkl. Tippfehler und so):
class CGI {
public:
void registerExtension( const std::string& ext, const std::string exeFileName);
const std::string& findExe( const std::string& ext) const;
private:
std::map<std::string, std::string> _cgiExt;
};
void CGI::registerExtension( const std::string& ext, const std::string exeFileName)
{
// check vorher, um zu verhindern, dass versehentlich eine extension
// zweimal registriert wird.
_cgiExt.insert( std::make_pair( ext, exeFileName);
}
const std::string& CGI::findExe( const std::string& ext) const
{
std::map<std::string, std::string>::const_iterator it
= _cgiExt.find( ext);
if( it == _cgiExt.end()) {
return std::string(); // nicht gefunden, Leerstring oder Exception?
}
return it->second;
}