У меня есть таблица символов, реализованная как std::map
. Для значения нет возможности законно построить экземпляр типа значения с помощью конструктора по умолчанию. Однако, если я не предоставляю конструктор по умолчанию, я получаю ошибку компилятора и, если я утверждаю конструктор, моя программа компилируется просто отлично, но падает внутри map<K,V>::operator []
, если я пытаюсь использовать его для добавления нового члена.
Есть ли способ заставить С++ запретить map[k]
как l-значение во время компиляции (позволяя ему как r-значение)?
Кстати: Я знаю, что могу вставить в карту, используя Map.insert(map<K,V>::value_type(k,v))
.
Изменить: несколько человек предложили решение, которое может изменить тип значения, чтобы карта могла построить его без вызова конструктора по умолчанию. Это имеет точно противоположный результат того, что я хочу, потому что он скрывает ошибку до конца. Если бы я был готов к этому, я мог бы просто удалить утверждение от конструктора. Я хочу, чтобы ошибка произошла еще раньше; во время компиляции. Тем не менее, кажется, что нет способа различать значения r-value и l-value operator[]
, поэтому кажется, что я не могу сделать, поэтому мне просто придется отказаться от использования всего этого.