Потеряны в литералах 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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