Есть глобальная структура, в ней пока пустая ссылка на инстанс класса датчика dht.
typedef struct {
SensorDht *dht = nullptr;
} GlobalSensors_t;
/* что-то типа &new SensorDht(...args) */
new SensorDht{ /*whatever*/ };
?&new
? но я на 99% уверен, что любое решение на основе deque (priority_queue или ручной вариант) будет самым быстрым, с учётом малого объёма данных и более частого попадания в кэш, чем при использовании деревьев
std::deque
не решает задач приоритетной очереди. Стандартная std::priority_queue
, при этом, по умолчанию базируется на std::vector
.Язык программирования - это просто инструмент.
Инструмент всегда выбирается под конкретный проект.
Профессионализм - это способность владеть широким набором инструментов и постоянная готовность осваивать новые инструменты.
std::hash
в некоторых реализациях обращается именно к функции CityHash64.hashed
и положить в Out of line. Так будет даже удобнее. Сама hashed
в таком случае станет очень легкой и сможет участвовать в операциях времени компиляции.std::hash
нам тут тоже не очень нужен. Мы вполне можем справиться (я очень уверенно справляюсь) с простой хеш-функцией, которая может быть и ненадежной, но давать максимально равномерное распределение значений. например, я работаю с конгруэнтным генератором - Ly.std::byte
, то inline
можно смело менять на constexpr
или consteval
. std::hash
не может использоваться в контексте времени компиляции. Он не отвечает требованиям к составным объектам времени компиляции. Он не имеет constexpr
конструктора и его оператор не помечен как constexpr
. Особенно у реализации для std::basic_string
. В общем смысле, согласно стандарту, код в примере не будет работать на этапе компиляции.std::unordered_map::find
свой аргумент принимает по ссылке. Как только от constexpr
объекта требуется указатель или ссылка, он сразу перестает быть constexpr
. В последних строках ничего не этапе компиляции делаться не будет.constexpr
, но она находится в составе типа, объект которого в коде хочет создаваться на этапе компиляции.std::hash
объявлять друзьями для hashed
? Доступ к приватному полю лучше организовать иначе. 7623723
находится в области доступной виртуальной памяти? Если это адрес, то он не выравнен и с таким адресом работать нельзя. А если это адрес в секцию исполнения, то помаши еще ручкой кэшу процессора.HexToBin
? Метод c_str
есть только у std::string
. Напрашивается вопрос: зачем функция HexToBin
возвращает не бинарные данные, а строковые? Она должна тогда называться HexToStr
, а лучше - как-нибудь осмысленно. memcpy
тебе не угодила?
*(pointer + counter)
Это точно C++? :)
Может сменим тег на C? Хотя, в C это тоже немного дико выглядит.
Какова в этом случае цель адресной арифметики в обход использования оператора произвольного доступа?
Каково преимущество в этом случае у адресной арифметики перед оператором произвольного доступа?