Потеряны в литералах uint8_t[] и std::spanC++

Программы на C++. Форум разработчиков
Anonymous
Потеряны в литералах uint8_t[] и std::span

Сообщение Anonymous »

У меня есть следующий очень упрощенный пример кода C++26:

Код: Выделить всё

class i2c_request {
public:
constexpr i2c_request(std::uint8_t address, std::span request) noexcept:
request_{request},
address_{address} {}

private:
std::span request_;
std::uint8_t address_;
};

constexpr auto requests = std::to_array({
{0x42, (const std::uint8_t[]){0x07, 0x00}},
{0x42, (const std::uint8_t[]){0x06, 0x00}}
});
Я хочу добиться того, чтобы {0x07, 0x00} и {0x06, 0x00} выделялись в статической памяти во время компиляции. Затем запросы массива также должны быть константами времени компиляции, чтобы избежать инициализации во время выполнения. Кажется, что код работает так, как ожидалось, но основная проблема заключается в том, что составные литералы официально не поддерживаются в C++. Кроме того, мне не нравится это видеть (const std::uint8_t[]) копировать-вставить.
Каким будет идиоматический способ достижения цели? Должен ли я реализовать какой-либо пользовательский суффикс строкового литерала?

Подробнее здесь: https://stackoverflow.com/questions/798 ... nd-stdspan

Вернуться в «C++»