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