Bunu deneyebilirsin:
Sınıfım.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
Sınıfım.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
Bu uygulama ile sınıflarınız sabit statik haritası özel bir üyedir ve genel bir get yöntemi kullanarak diğer sınıflar tarafından erişilebilir. Aksi takdirde, sabit olduğundan ve değiştirilemeyeceğinden, public get yöntemini kaldırabilir ve map değişkenini sınıflar public bölümüne taşıyabilirsiniz. Bununla birlikte, miras ve / veya çok biçimlilik gerekliyse createMap yöntemini özel veya korumalı olarak bırakırdım. İşte bazı kullanım örnekleri.
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.
Orijinal gönderimi düzenledim, onun için derlediğim, oluşturduğum ve doğru şekilde çalıştırdığım orijinal kodda yanlış bir şey yoktu, sadece bir cevap olarak sunduğum ilk sürümüm, haritanın herkese açık olarak ilan edilmesi ve haritanın sabit ancak statik değildi.