Не знаю, куда запостить: сюда, в с++ или в философию. Если ошибся, модераторы, перенесите пожалуйста, куда следует
Сегодня в процессе велосипедостроения получил нечто такое:
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;
};
...
};
Вот, и расскажите мне, пожалуйста, как "по-научному" называется такой полиморфизм (ведь в обоих случаях он будет параметрическим? а в первом — ограниченный?) и в чём их разница с точки зрения ФП (а не с точки зрения работы компилятора
. Спасибо
Курица — это инструмент, с помощью которого одно яйцо производит другие.