Могу ли я использовать STD :: Align для проверки выравнивания данного указателя?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Могу ли я использовать STD :: Align для проверки выравнивания данного указателя?

Сообщение Anonymous »

Следующий шаблон функции пытается найти объект в массиве байтов.
Мы можем предположить, что буфер аргумента < /code> «обычно» удерживает объект данного типа, но мне нужен диагностический (проверка утверждения) против возможных ошибок. < /p>

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

template 
T* get_object_from_buffer(std::uint8_t* buffer, std::size_t size)
{
// This constraint was missing in original version of the question.
if (size != sizeof(T))
{
// Invalid usage of the function.
return nullptr;
}

void* tmp_buffer = buffer;
if (nullptr != std::align( alignof(T),
sizeof(T),
tmp_buffer,
size ) )
{
return reinterpret_cast(buffer);
}
else
{
// Caller can check returned pointer to implement diagnostic reactions
return nullptr;
}
}
Вопросы:

[*] разрешено (и портативно) делать это с помощью std :: align ? /> Условия: < /p>
  • Функция будет использоваться в встроенной системе.
    Следовательно, некоторые хиты Google для std :: Выравнивание на платформах ПК не применимы. < /p>
    < /li>
    буфери

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

        template 
    std::pair put_object_into_buffer(T* object)
    {
    return std::pair(
    reinterpret_cast(object),
    sizeof(object)
    );
    }
    
    Между функциями put/get, я должен пройти буфер через библиотеку, которая не является
    , знакомы с определенными пользователями типами, такими как t .
. T объект. Это отсутствовало в исходном вопросе.>

Подробнее здесь: https://stackoverflow.com/questions/782 ... en-pointer
Ответить

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

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

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

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

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