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
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@lists.boost.org
http://lists.boost.org/mailman/listinfo.cgi/boost-users