Re[3]: Максимальный размер типа во время компиляции
От: T4r4sB Россия  
Дата: 01.11.15 18:56
Оценка: 4 (1)
Здравствуйте, Alexander G, Вы писали:

AG>Здравствуйте, kov_serg, Вы писали:



AG>А как быть с выравниванием?

union E
{ 
  char a[sizeof(A)], 
  b[sizeof(B)], 
  d[sizeof(D)]; 

  tblib::Align<A> aa;
  tblib::Align<B> ab;
  tblib::Align<D> ad;
};


  Велосипед для бустофобов
#pragma once
#include "stdint.h"
namespace tblib 
{
    template <typename T>
    struct _CheckAlign
    {
        uint8_t c;
        T t;
        _CheckAlign();
        _CheckAlign(const _CheckAlign&);
        _CheckAlign&operator=(const _CheckAlign&);
    };

    template <typename T>
    struct _AlignValue
    {
        enum { value = sizeof(_CheckAlign<T>)-sizeof(T) };
    };

    template <int N>
    struct _AlignBySize;

    template <> 
    struct _AlignBySize<1> { uint8_t  guts; };

    template <> 
    struct _AlignBySize<2> { uint16_t guts; };

    template <> 
    struct _AlignBySize<4> { uint32_t guts; };

    template <> 
    struct _AlignBySize<8> { uint64_t guts; };

    template <typename T>
    struct Align
    {
        _AlignBySize<_AlignValue<T>::value> guts;
    };
};
Нет такой подлости и мерзости, на которую бы не пошёл gcc ради бессмысленных 5% скорости в никому не нужном синтетическом тесте
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.