Boost logo

Boost Users :

From: Ovanes Markarian (om_boost_at_[hidden])
Date: 2007-10-18 03:04:39


Hello Zeljko,

may be another approach? Why not using a template method and static concepts
inside a function, which ensure that a parameter is of correct type?

With Kind Regards,
Ovanes

On 10/18/07, Zeljko Vrba <zvrba_at_[hidden]> wrote:
>
> A short introduction: the ML language has a variant data type, tuples,
> and pattern matching construct. For example
>
> type operand = Imm of int | Reg of string
> type instruction = Insn of string | Pseudo of string
>
> Now, we can create tuples, e.g. (Insn "push", Reg "%rbp") is of type
> operand * instruction (a tuple of two typed elements).
>
> In function definitions, it is possible to do pattern matching as
> (it could be written slightly better in ML, but I want to show the
> match syntactic construct):
>
> let f x = match x with
> | (Insn "addq", Reg "%rsp") -> (* do something *)
> | (_, Imm x) -> (* any 1st item; the 2nd must be Imm type, and
> the x variable is bound to the value carried by the 2nd
> item *)
> | (_, Reg "%rsp") ->
> (* any value for 1st item _except_ Insn "addq" which has
> already been handled in the first alternative -
> alternatives
> are matched in order and first matching is taken *)
> | _ -> (* default case for anything else *)
>
> This is only a simplified example; but even this example would
> be much more ugly if rewritten with if/else statements, even if
> tuple tiers were used. Boost provides both the safe variant
> type and the tuple type. Would it be possible to construct
> pattern matching with syntax similar to the above in C++ ?
>
> [Yes, there are also other problems - incomplete matches: ML
> just throws an exception in that case; or redundant cases -
> nothing happens.]
>
> _______________________________________________
> Boost-users mailing list
> Boost-users_at_[hidden]
> http://lists.boost.org/mailman/listinfo.cgi/boost-users
>



Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net