Проясните использование alignof()

84
23 ноября 2019, 03:10

Есть буфер, реализованный в виде

vector<uint8_t> buffer;

Есть структуры

struct Color
{
    uint8_t alpha = 0;
    uint8_t red   = 0;
    uint8_t green = 0;
    uint8_t blue  = 0;
};
using PaletteRef = std::span<Color>;
using BitmapRef  = std::span<uint8_t>;
using TextRef    = std::span<char>;
struct Content
{
    PaletteRef palette;
    BitmapRef bitmap;
};

Нужно писать/читать в этот буфер данные PaletteRef, BitmpaRef, TextRef.

Функция копирования имеет следующий вид

void copy_and_ref_data(Content& content, std::vector<uint8_t>& buffer, size_t& offset)
{
    size_t size_to_write = content.palette.size_bytes();
    if (size_to_write)
    {
        memcpy(buffer.data() + offset, content.palette.data(), size_to_write);
        content.palette = PaletteRef((Color*)&buffer[offset], content.palette.size());
        offset += size_to_write;
    }
    size_to_write = content.bitmap.size_bytes();
    if (size_to_write)
    {
        memcpy(buffer.data() + offset, content.bitmap.data(), size_to_write);
        content.bitmap = BitmapRef(&buffer[offset], content.bitmap.size());
        offset += size_to_write;
    }
}

Мне указали, что нужно корректно использовать alignof(Color). Но я не пойму как. Уже просмотрел мнгого постов на этом и не только сайте, но так и не понял, как применить и зачем alignof.

READ ALSO
Spring Data JPA: Specification

Spring Data JPA: Specification

Мне нужно составить через спецификации запрос, в котором я исключу из выборки несколько ID

121
Android Error java.lang.NoClassDefFoundError при запуске

Android Error java.lang.NoClassDefFoundError при запуске

Использую библиотеку FrescoВыкидывает ошибку:

137
Не срабатывает PreUpdate в Spring Data

Не срабатывает PreUpdate в Spring Data

Есть вот такой класс:

116
JavaFX 11 javafx.embed.swing does not exist

JavaFX 11 javafx.embed.swing does not exist

Есть проект на OpenJDK11 + OpenJFX11Запускал через Maven, но необходимо перейти на Gradle

129