enum overloading

Ellery Newcomer ellery-newcomer at utulsa.edu
Sat May 22 18:20:16 PDT 2010


On 05/22/2010 05:08 PM, strtr wrote:
> == Quote from Ary Borenszweig (ary at esperanto.org.ar)'s article
>> Ary Borenszweig wrote:
>>> strtr wrote:
>>>> Sorry, should have included this :)
>>>>
>>>> ----
>>>> module main;
>>>> import std.string;
>>>> import std.stdio;
>>>>
>>>> enum ENUM { A,B }
>>>>
>>>> char[] toString(ENUM e_){return "enum";}
>>>>
>>>> void main (){
>>>>      writefln( toString(3) );
>>>>      writefln( toString(ENUM.A) );
>>>> }
>>>> --
>>>> main.d(10): Error: function main.toString (ENUM) does not match
>>>> parameter types (int)
>>>> main.d(10): Error: cannot implicitly convert expression (3) of type
>>>> int to ENUM
>>>> ----
>>>
>>> That's not overloading,
>> Overloading is defining many functions with the same name but different
>> type arguments.
>>    you are expecting an implicit conversion from
>>> int to ENUM. Maybe if you cast 3 to ENUM, but still... no ENUM value
>>> will be found for 3. What are you trying to do?
>
> Well, actually, I was expecting std.string.toString(int) to be called for the int
> and my toString(ENUM) for the enum..?

That would work except

a) walter's hijacking fetish; if you want to overload a function with 
one imported from an external module, you'd have to do something like

import std.string: toString;

(it strikes me that this is a necessary product of a loose type system)

 From a discussion with walter a while back, I gathered not possible.

b) std.string.toString isn't a function - it's a template



More information about the Digitalmars-d-learn mailing list