У меня есть static std::map<std::string, CreateGUIFunc>
в классе, который в основном содержит строки, идентифицирующие типы GUI, а CreateGUIFunc является ссылкой на фабричную функцию.
В моем конструкторе у меня есть
if ( m_factoryRef.size() == 0 ) {
m_factoryRef["image"] = &CreateGUI<Image>;
m_factoryRef["button"] = &CreateGUI<Button>;
}
...
Однако, это дает мне ошибку, говорящую assignment of read-only location ‘GUIManager::m_factoryRef.std::map<_Key, _Tp, _Compare, _Alloc>::operator[] [with _Key = std::basic_string<char, std::char_traits<char>, std::allocator<char> >, _Tp = GUI*(), _Compare = std::less<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, _Alloc = std::allocator<std::pair<const std::basic_string<char, std::char_traits<char>, std::allocator<char> >, GUI*()> >](((const std::basic_string<char, std::char_traits<char>, std::allocator<char> >&)(& std::basic_string<char, std::char_traits<char>, std::allocator<char> >(((const char*)"image"), ((const std::allocator<char>&)((const std::allocator<char>*)(& std::allocator<char>())))))))’|
Я не уверен, почему это назначение только для чтения. Я также попытался изменить его на обычный член, просто чтобы посмотреть, может ли это быть связано со статичностью, но то же самое.
В чем проблема?
Редактировать: Некоторые определения, чтобы сделать вещи немного яснее
// these are all private
typedef GUI* CreateGUIFunc();
template<class T>
GUI* GUIManager::CreateGUI( std::string &filepath, int x, int y ) {
return new T( filepath, x, y );
}
static std::map<std::string, CreateGUIFunc> m_factoryRef;
P.S. Если есть более понятный способ инициализации статической карты, пожалуйста, дайте мне знать.