คุณสามารถลองสิ่งนี้:
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
ด้วยการใช้งานนี้แผนที่คงที่คลาสของคุณเป็นสมาชิกส่วนตัวและสามารถเข้าถึงคลาสอื่น ๆ โดยใช้วิธีรับสาธารณะ มิฉะนั้นเนื่องจากค่าคงที่และไม่สามารถเปลี่ยนแปลงได้คุณสามารถลบเมธอด public get และย้ายตัวแปรแผนที่ไปยังส่วน public ของคลาสได้ อย่างไรก็ตามฉันจะปล่อยให้เมธอด createMap เป็นส่วนตัวหรือได้รับการป้องกันหากจำเป็นต้องมีการสืบทอดและหรือความหลากหลาย นี่คือตัวอย่างการใช้งานบางส่วน
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.
ฉันได้แก้ไขโพสต์เดิมของฉันแล้วไม่มีอะไรผิดปกติกับโค้ดดั้งเดิมที่ฉันโพสต์เพื่อคอมไพล์สร้างและรันอย่างถูกต้องมันเป็นเพียงเวอร์ชันแรกของฉันที่ฉันนำเสนอเป็นคำตอบแผนที่ถูกประกาศเป็นสาธารณะและแผนที่นั้น const แต่ไม่คงที่