Да, это возможно. Это просто кажется повышением:: диапазон не имеет поддержки его из поля, но Вы можете
boost::counting_iterator
, который делает, что Вы хотите operator*()
возвратил бы число и использование что как итератор для range
Прежде всего, не беспокойтесь о производительности для подобных вещей. Если вы не запрашиваете его 100 раз в секунду, этого будет более чем достаточно. Преждевременная оптимизация вызовет у вас все виды головной боли.
RegOpenKeyEx вернет ERROR_SUCCESS, если найдет ключ. Просто проверьте эту константу, и все готово.
RegOpenKey
возвращает ошибку, если ключ не существует. Как ты им пользуешься? Ожидаемое возвращаемое значение - ERROR_FILE_NOT_FOUND
.
Из вашего кода:
HKEY subKey = nullptr;
LONG result = RegOpenKeyEx(key, subPath.c_str(), 0, KEY_READ, &subKey);
if (result != ERROR_SUCCESS) {
Я бы посмотрел на значение ключа
и subPath
и убедился, что они что вы ожидаете, и что ключ на самом деле не существует. Каково значение subKey
впоследствии? Очевидно, что он что-то открывает - попробуйте перечислить его, чтобы увидеть, какие ключи и значения под ним.
Нет проблем с RegOpenKey
, не возвращающим ошибку, если ключ не существует - я бы не пытался предположить, что есть какая-то странная ошибка ОС в чем-то, столь же часто используемом, как реестр.
Возможно, у вас есть раздел реестра, который не виден вам, пользователю, который запускает редактор реестра, но не к твоему коду? Возможно, проблема с разрешениями? Ваш код работает как пользователь с повышенными привилегиями в Windows Vista или Server 2008? Вы пробовали запустить редактор реестра от имени администратора?
Обратите внимание, что помимо «основных» функций реестра, которые начинаются с «Reg», есть также вспомогательные функции, начинающиеся с «SHReg». Они предназначены для использования оболочкой , т.е. проводником, но задокументированы и могут использоваться также в обычных приложениях. Обычно это тонкие обертки, которые упрощают некоторые общие задачи. Они являются частью "Shell LightWeight API" (shlwapi.dll)