![]() |
explicit специализация | ||
Предположим, что вы написали шаблон, и вы хотите, чтобы пользователь мог пользоваться только его полными или частичными специализациями. Напрямую explicit специализация в C++ запрещена, однако это ограничение можно легко обойти. Достаточно просто сделать неполное объявление неспециализированного шаблона. Таким образом, например, реализуется assert уровня компиляции. |
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | template <bool> struct static_assert; template <> struct static_assert<true> { enum { static_assertation_fault }; }; #define sassert(cond) \ static_assert<static_cast<bool>(cond)>::static_assertation_fault #define os_version 10 int main() { sassert(os_version > 17); return 0; } |
|
Статистика |
|