Симуляция частичной специализации - страница 4

Шрифт
Интервал

стр.

Единственным «серьезным» требованием к компилятору является наличие реализации шаблонов членов классов. Симуляция частичной специализации была проверена на следующих компиляторах:

•Microsoft Visual C++ 7.0 aka .NET

•Microsoft Visual C++ 6.0 SP4, SP5

•Intel C++ Compiler 4.0, 5.1, 6.0

•Borland C++ Command-line Compiler 5.51, 5.6

•GNU GCC 2.95.3-5

•Comeau C++ Compiler Online Version (compiled only)

Хотя последние четыре и поддерживают частичную специализацию, иногда может быть полезным прибегать к технике симуляции в случае одновременного использования нескольких компиляторов, один из которых «не дорос» до частичной специализации. При этом удобно, если использование условной компиляции можно минимизировать.

Комментарии:

>template‹class TRet, class TP1›

>class CDelegate1 {

> //…

>};


>template‹class TP1›

>class CDelegate1‹bool, TP1› {

> //…

>};


>template‹class TRet, class TP1, class TP2›

>class CDelegate2 {

> //…

>};


>template‹class TP1, class TP2›

>class CDelegate2‹bool, TP1, TP2› {

>//…

>};

и т.д…

Андрей 20.3.2003 12:22
... и статической T не надо

А мне как то больше понравился такой вариант (где нет статического T _t):

>template‹class T›

>class IsPointer {

>private:

> struct TrueType {> char dummy_ [1];> };

> struct FalseType { char dummy_ [2]; };

> struct PointerShim { PointerShim(const volatile void*); >};

> static TrueType ptr_discriminator(PointerShim);

> static FalseType ptr_discriminator(…);

> static T rett();

>public:

> enum {value = sizeof(ptr_discriminator(rett())) == sizeof(TrueType)};

>};


>template‹›

>class IsPointer‹void› {

>public:

> enum {value = false};

>};


Кстати, еще неплохо было бы дабавить IsArray, который таки почти смог добить Андрей Тарасевич в одном из топиков форума С++

PS Павел, кстати, эту же статью от вас я уже видел в каком то online издании… Или я ошибаюсь?

Andrew S 7.3.2003 17:50
А ссылку на boost.org?

Почему не указал ссылку на boost.org? Там уж намного больше готовых функций, чем ты привёл.

limax 7.3.2003 15:1


стр.

Похожие книги