Способы реализации быстрого каламбура типизации в C++?

Скажите, пожалуйста, какие существуют правильные способы выполнять в C++ быстрый каламбур типизации?

Например, в задачах, где очень важна скорость (например, при обработке сетевых пакетов) устоявшимся является способ работы с потоком байтов через указатель на целевой тип:

void ProcessPacket(const void*const data, const size_t size)
{
    if (size < sizeof(Packet))
    return;

    Packet*const packet = reinterpret_cast<Packet*const>(data);

    if (packet->Header.Version == 1)
    {
        // ...
    }
}

Я знаю, что такой способ нарушает Правила Строгих Псевдонимов. Теоретически, это правило можно отключить соответствующим ключом компиляции, но даже в таком случае останется проблема нарушения требований выравнивания целевого типа. Требования выравнивания - более фундаментальная проблема.

Я знаю, что можно использовать для каламбура типизации тот же memcpy() или более современный шаблонный вариант преобразования. В основном, компилятор распознает большинство типичных случаев использования memcpy() для реализации каламбура типизации, исключая копирование, но даже при учете всего этого код становится объемным и страшным.

Есть ли другие варианты реализации быстрого каламбура типизации?


Ответы (0 шт):