<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 TRANSITIONAL//EN">
<HTML>
<HEAD>
  <META HTTP-EQUIV="Content-Type" CONTENT="text/html; CHARSET=UTF-8">
  <META NAME="GENERATOR" CONTENT="GtkHTML/4.2.2">
</HEAD>
<BODY>
Yes I did it using Variant and it works fine<BR>
<BR>
Il giorno mer, 18/07/2012 alle 16.42 +0200, Philippe Sigaud ha scritto:<BR>
<BLOCKQUOTE TYPE=CITE>
    > class Known<BR>
    > {<BR>
    >          void* data; // external data by c api<BR>
    >          int type;  // 0 for int, 1 for string, etc. ..<BR>
    > }<BR>
    ><BR>
    > How can I implement a method like this?<BR>
    ><BR>
    > Known  known;  // <-- suppose known.type == 1;<BR>
    > string s  = known.value(); // <-- automatic <BR>
    ><BR>
    > I just know how to do this:<BR>
    ><BR>
    > string s = know.value!string(); <BR>
    <BR>
    As bearophile said, you cannot change a value's type (which is a compile-time construct) with a runtime value, as is Known.type. <BR>
    <BR>
    Second point, in D, the rhs is fully evaluated before being assigned to the lhs, I think. So, known.value() must evaluate to *something*, without knowing it will be assigned to a string.<BR>
    In your example, what happens if known.type != 1? <BR>
    <BR>
    You can use Phobos Variant, (or Algebraic if the range of types you plan to use is known beforehand). Then, you should test typeid before using it.<BR>
    <BR>
</BLOCKQUOTE>
<BR>
</BODY>
</HTML>