bigfloat

grauzone none at example.net
Sun Apr 12 15:39:50 PDT 2009


> Instead, what if the literal syntax was amended to take an optional type 
> name, like this:
> 
>    // Defaults to using built-in associative array type
>    auto assocArray = [
>       "hello" : "world
>    ];
> 
>    // Uses my own custom type.
>    auto hashtable = MyHashTableType!(string, string) [
>       "hello" : "world
>    ];
> 
> You could accomplish that pretty easily, as long as the custom type had 
> a no-arg constructor and a function with the signature:
> 
>    void add(K key, V val)

What about this: an associative array literal would have the type (Key, 
Value)[] (an array of a Key-Value tuple), and you'd use opAssign (or the 
new implicit casting operators from D2.0, opImplicitCastFrom or what it 
was) to convert it to your hash table type.

MyHashTableType hashtable = ["hello" : "word"];

expends to

(char[], char[])[] tmp = [("hello", "word")];
MyHashTableType hashtable = tmp;

expands to

(char[], char[])[] tmp = [("hello", "word")];
MyHashTableType!(char[], char[]) hashtable; //magical type inference
hashtable.opAssign([("hello", "word")]);

Anyway, looking forward to the day the D compiler is merely a CTFE 
interpreter, and the actual code generation is implemented as D library 
and executed as normal user code during compile time.



More information about the Digitalmars-d mailing list