Sets / associative arrays with void values?
Carlos Santander
csantander619 at gmail.com
Sun Jan 7 06:29:57 PST 2007
Chris Nicholson-Sauls escribió:
> Jeff M wrote:
>> On 2007-01-06 16:05:06 -0800, "Vladimir Panteleev"
>> <tehcybershadow at gmail.com> said:
>>
>>> I've been wondering whether D supported sets, or something similar.
>>> What I have in mind isn't unlike associative arrays, but without
>>> values: an unordered list with quick look-up and simple
>>> addition/removal of elements, yet still capable of enumeration, etc.
>>>
>>> I followed my intuition and tried to declare an associative array
>>> with a "void" value type:
>>>
>>> void[int] foo;
>>>
>>> To my surprise, it compiled. And even the "in" operation and the
>>> .keys and .values properties worked fine (or as fine as they can
>>> work with an empty associative array).
>>>
>>> Of course, the question comes: how would one add keys to such a
>>> construct? The practical answer is obvious: use a real "dummy" data
>>> type (bit, for example) as the value type, but I find it a shame
>>> that declaring such constructs is allowed - yet you can't really use
>>> them.
>>
>> It would be nice if a "void[int]" array was usable. Associative arrays
>> are create-on-access, so "foo[5];" should be a legal for creating an
>> index in the array, but this throws an error.
>>
>> -- Jeff
>>
>
> Actually I'm pretty sure create-on-access was removed several releases
> back? And I also thought the compiler no longer allowed a void value
> type for associative arrays, but I guess I was wrong on that one.
>
> -- Chris Nicholson-Sauls
That's true.
Back then, I used "void[T]" as a set, but since the change, I use "T[T]".
BTW, since "void[T]" is mostly useless (for the reasons stated above), would it
be reasonable for the compiler to flag such a declaration as an error?
--
Carlos Santander Bernal
More information about the Digitalmars-d
mailing list