Sie könnten dies versuchen:
MyClass.h
class MyClass {
private:
static const std::map<key, value> m_myMap;
static const std::map<key, value> createMyStaticConstantMap();
public:
static std::map<key, value> getMyConstantStaticMap( return m_myMap );
}; //MyClass
MyClass.cpp
#include "MyClass.h"
const std::map<key, value> MyClass::m_myMap = MyClass::createMyStaticConstantMap();
const std::map<key, value> MyClass::createMyStaticConstantMap() {
std::map<key, value> mMap;
mMap.insert( std::make_pair( key1, value1 ) );
mMap.insert( std::make_pair( key2, value2 ) );
// ....
mMap.insert( std::make_pair( lastKey, lastValue ) );
return mMap;
} // createMyStaticConstantMap
Mit dieser Implementierung ist die statische Map Ihrer Klassenkonstante ein privates Mitglied und kann mithilfe einer öffentlichen get-Methode für andere Klassen zugänglich sein. Andernfalls können Sie die public get-Methode entfernen und die Map-Variable in den öffentlichen Abschnitt der Klasse verschieben, da sie konstant ist und sich nicht ändern kann. Ich würde jedoch die createMap-Methode privat oder geschützt lassen, wenn Vererbung und / oder Polymorphismus erforderlich sind. Hier sind einige Anwendungsbeispiele.
std::map<key,value> m1 = MyClass::getMyMap();
// then do work on m1 or
unsigned index = some predetermined value
MyClass::getMyMap().at( index ); // As long as index is valid this will
// retun map.second or map->second value so if in this case key is an
// unsigned and value is a std::string then you could do
std::cout << std::string( MyClass::getMyMap().at( some index that exists in map ) );
// and it will print out to the console the string locted in the map at this index.
//You can do this before any class object is instantiated or declared.
//If you are using a pointer to your class such as:
std::shared_ptr<MyClass> || std::unique_ptr<MyClass>
// Then it would look like this:
pMyClass->getMyMap().at( index ); // And Will do the same as above
// Even if you have not yet called the std pointer's reset method on
// this class object.
// This will only work on static methods only, and all data in static methods must be available first.
Ich hatte meinen ursprünglichen Beitrag bearbeitet, es war nichts Falsches an dem ursprünglichen Code, in dem ich ihn gepostet habe, kompiliert, erstellt und korrekt ausgeführt. Es war nur so, dass meine erste Version, die ich als Antwort präsentierte, die Karte als öffentlich deklariert wurde und die Karte war const war aber nicht statisch.