Общим вопросом, возникающим время от времени в мире программирования на C++, является определение конечной даты во время компиляции. Обычно это делается с едва переносимыми #ifdefs. Но имеет ли ключевое слово С++ 11 constexpr
наряду с специализацией шаблона лучшее решение для этого?
Будет ли законным С++ 11 делать что-то вроде:
constexpr bool little_endian()
{
const static unsigned num = 0xAABBCCDD;
return reinterpret_cast<const unsigned char*> (&num)[0] == 0xDD;
}
И затем специализируйте шаблон для обоих типов endian:
template <bool LittleEndian>
struct Foo
{
// .... specialization for little endian
};
template <>
struct Foo<false>
{
// .... specialization for big endian
};
И затем выполните:
Foo<little_endian()>::do_something();