Брутально и бессердечно о программировании и проектировании
ГлавнаяФорумАртПаттерныАнтипаттерныТест-драйвВопрос-ответКнигорецензииСправочная

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;
}

Оглавление
Статистика
© 2007—2009 Inside C++ Коммерческие услугиКонтактная информация

Где купить сотовые телефоны Nokia в Украине ?. отзывы дом-2 реалити шоу. сетевые видео камеры. ноутбуки. конвертировать flv. вагонные весы, бункерные весы