wxVListBox с & # 8220; dynamic & # 8221; данные
-
05-07-2019 - |
Вопрос
У меня есть поток данных, который я хочу поместить в контейнер. Этот контейнер будет иметь фиксированный размер или динамически ограничен определенным размером во время выполнения. Последнее может быть предпочтительным.
Когда контейнер заполнен, самые старые данные будут удалены.
Я хочу отобразить эти данные с помощью wxVListBox , потому что мне нужен полный контроль над дисплеем. Однако есть проблема: вызовы OnDrawItem не являются атомарными. Это означает, что после заполнения контейнера каждый вызов OnDrawItem будет обращаться к движущимся данным, результатом будет несмежное отображение с отсутствующими элементами.
Это, безусловно, верно для любого контейнера с встроенной индексацией, подобной массиву, которая требуется OnDrawItem .
Я могу смоделировать индексацию, подобную массиву, в std :: map , используя индексацию итератора, если ключ является последовательным целым числом, тогда все элементы будут упорядочены, и карту можно будет легко удалить, но это похоже на неэффективный хак. Р>
Как я могу решить это? Какие-нибудь другие идеи или контейнеры, о которых я не думал?
Решение
Лучшим подходом, похоже, является ленивое управление полным состоянием контейнера в OnDrawBackground . Таким образом, сам интерфейс гарантирует, что данные останутся статичными при последующих вызовах OnDrawItem , используя deque в качестве контейнера.