On Feb 10, 2008 3:40 PM, Mattes Simeon <[EMAIL PROTECTED]> wrote: > Thanks for your help. It was very useful. > > Though in comparison with C or C++ I can't figure out so clear the syntax. > Maybe it has to do with the syntactic Sugar of each Language. I 'll give you a > similar example I saw in a book for Haskel > > The following program just returns the value of the position of a datatype > Tuple > which can hold one or two elements. > > data Tuple a b = One a | Two a b > tuple1 (One a)= Just a > tuple1 (Two a b) = Just a > > tuple2 (One a) = Nothing > tuple2 (Two a b) = Just b > > The corresponding Version in C++, which seems to be more appropriate, would be
I think this is the most native way to do it in C++: template <class A, class B> class Tuple { public: static Tuple<A, B> *One (A *a) { return new One (a); } static Tuple<A, B> *Two (A *a, B *b) { return new Two (a, b); } virtual A *tuple1 () = 0; virtual B *tuple2 () = 0; }; template <class A, class B> class One : Tuple<A, B> { public: One (A *a) { this->a = a; } A *tuple1 () { return a; } B *tuple2 () { return NULL; } private: A *a; } template <class A, class B> class Two: Tuple<A, B> { public: Two (A *a, B *b) { this->a = a; this->b = b} A *tuple1 () { return a; } B *tuple2 () { return b; } private: A *a; B *b; } -- vir http://vir.comtv.ru/ _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe