zugriff auf std:: aus anderen funktionen herraus



  • so hab mal wieder ne frage diesmal gehts um std::map

    bis jetzt hab ich das so gemacht

    im header

    typedef std::mapstd::string,std::string cgi_all_ext;

    in ...cpp

    void readinextensions()
    {
          cgi_all_ext cgi_ext; // hold all extions to be execute as a cgi
    .
    .
    .
          cgi_ext.insert(std::map<std::string,std::string>::value_type(CgiExtension, ExeToExecute));
    

    was muss ich tun das ich auch von mehreren funktionen aufs maps zugreifen kann?



  • std::map<std::string,std::string>::value_type(CgiExtension, ExeToExecute)
    

    =>

    cgi_all_ext::value_type(CgiExtension, ExeToExecute)
    

    😕 😕 😕



  • Sind die Funktionen logisch gekoppelt? Dann wäre eine Klasse eine gute Alternative zum Funktions-Wirr-Warr:

    // Header
    class MyMap
    {
        std::map<std::string,std::string> cgi_all_ext;
    
        public:
            void method1 ();
            void method2 ();
    };
    
    // Cpp
    void MyMap::method1 ()
    {
        // cgi_all_ext verwenden
    }
    
    // main
    MyMap mymap;
    mymap.method1();
    mymap.method2();
    

    Wenn das - aus welchen Gründen auch immer - nciht möglich sein sollte, musst du die Map an sämtliche Funktionen übergeben. Das heißt erstmal musst du sie aus readinextensions() rauskreiegn (per rückgabe am besten wohl) und dann anderen funktionen per parameter übergeben. aber bitte per const-reference und nicht per-value wegen der Größe.

    MfG SideWinder



  • gibt es keine möglichkeit die z.b. allen funktionen einfach per pointer zu übergeben?



  • Klar steht doch im Satz unter dem Code :o

    void function1 (cgi_all_ext& cgi_ext_map, ...weitere Paraemter...)
    {
        // dosth
    }
    
    void function2 (cgi_all_ext& cgi_ext_map, ...weitere Parameter...)
    {
        // dosth
    }
    
    ...
    
    cgi_all_ext myMap;
    function1(myMap, blubb, foo, bar);
    function2(myMap, sonstwas);
    

    Ich benutze hier Übergabe per Referenz. Zeiger sollte man in C++ nicht mehr für call-by-reference-Übergabe verwenden wenn es vermeidbar ist.

    MfG SideWinder



  • also wenn ich das richtig verstehe muss mein code jett so aussehen

    cgi.h

    std::map<std::string,std::string> cgi_all_ext;
    
    void readinextensions(cgi_all_ext& cgi_ext_map)
    

    cgi.cpp

    void readinextensions(cgi_all_ext& cgi_ext_map)
    {
    
    cgi_ext_map.insert(std::map<std::string,std::string>::value_type(CgiExtension, ExeToExecute));
    

    main.cpp

    cgi_all_ext myMap;
    readinextensions(myMap);
    

    ist dies so richtig oder hab ich wieder was falsch verstanden


Anmelden zum Antworten