два способа передачи метаинформации на с++
От: frogkiller Россия  
Дата: 30.04.08 20:32
Оценка:
Не знаю, куда запостить: сюда, в с++ или в философию. Если ошибся, модераторы, перенесите пожалуйста, куда следует

Сегодня в процессе велосипедостроения получил нечто такое:
template <class T>
struct Foo
{
    typedef T ArgT;
};

// ----------------------------------------------
template <class FooT>
struct Bar1
{
    typedef typename FooT::ArgT ArgT;
};

// ----------------------------------------------
template <class FooT>
struct Bar2;

template <class T, template <class> class FooT>
struct Bar2< FooT<T> >
{
    typedef T ArgT;
};


В принципе понятно, в чём здесь разница, и что будет делать компилятор в каждом случае. Также понятно, что второй способ даёт гораздо больше возможностей по рефлексии, например, можно сделать так:
template <class T, template <class> class FooT>
struct Bar2< FooT<T> >
{
    template <class U>
    struct Rebind
    {
        typedef FooT<U> Result;
    };
    ...
};


Вот, и расскажите мне, пожалуйста, как "по-научному" называется такой полиморфизм (ведь в обоих случаях он будет параметрическим? а в первом — ограниченный?) и в чём их разница с точки зрения ФП (а не с точки зрения работы компилятора . Спасибо
Курица — это инструмент, с помощью которого одно яйцо производит другие.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.