On Vox: Объясните, а?
Feb. 5th, 2009 12:51 amВот есть хаскельный код (пример упрощён до предела):
data P a = P a (forall b. b -> P (a, b))Нормально компилится, если указать прагму
LANGUAGE RankNTypes в GHC или ключик -98 в Hugs-е.Можно написать несколько "генераторов" для такого
P:sameValue :: a -> P aКак сделать это на C++???
sameValue x = P x (\y -> sameValue (x, y))
firstRest :: a -> a -> P a
firstRest x y = P x (\z -> sameValue (y, z))
switching :: a -> a -> P a
switching x y = P x (\z -> switching (y, z) (x, z))
Я попробовал, моего плюс-фу не хватило. Светилы, если вы есть, можете подсказать?
Хочется что-то вроде этого:
#include <map>
template <class A> class P {
A car;
template <class B> virtual P<std::pair<A,B> > cdr (B) = 0;
};
Не заработает, ибо
template и virtual вместе не живут. Убрать virtual нельзя - класс определяется как абстрактный, реализация функции cdr будет разной (см. выше), но эту разницу надо скрыть "под капотом", указывая везде базовый класс.Как?
Originally posted on migmit.vox.com
no subject
Date: 2009-02-05 06:49 pm (UTC)В C++ ты можешь там написать зюзюзю(b) и всё будет окей, до тех пор пока ты непопробуешь передать туда B для которого нет зюзюзю(b)
no subject
Date: 2009-02-05 07:39 pm (UTC)