Здравствуйте, 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% скорости в никому не нужном синтетическом тесте