Я думал, один из них:Каков наилучший способ в C++ иметь постоянную времени компиляции в зависимости от размера шрифта?
#if sizeof(size_t) == 8
const size_t foo = 12345;
#elif sizeof(size_t) == 4
const size_t foo = 123;
#else
#error "Unsupported size_t size"
#endif
или
template <int S> class Foo { static const size_t foo = 0; };
template <> class Foo<8> { static const size_t foo = 12345; };
template <> class Foo<4> { static const size_t foo = 123; };
const size_t foo = Foo<sizeof(size_t)>::foo;
Кроме того, как я могу бросить ошибку во время компиляции, используя второй метод?
Вы можете использовать 'std :: static_assert' во втором методе. – Kevin
'# if' не знает о' sizeof'. Вы можете использовать некоторые макросы из 'limits.h', хотя, например, 'SIZE_MAX'. –
@MattMcNabb Это хороший момент, я забыл об этом. И 'SIZE_MAX' будет работать, только если это фактически' size_t' (или один из других стандартных типов), о котором я забочусь, что не обязательно так. – Matt