Thread overview
Allow static methods and fields for enum?
Jan 26, 2017
Profile Anaysis
Jan 26, 2017
drug
Jan 26, 2017
pineapple
Jan 26, 2017
Jonathan M Davis
Jan 26, 2017
Daniel Kozák
January 26, 2017
Why not make enum a comparable type to structs and classes?

They are static so they can't contain any mutable fields but surely they can contain methods? And especially they should be able to contain static methods!?



January 26, 2017
26.01.2017 09:32, Profile Anaysis пишет:
> Why not make enum a comparable type to structs and classes?
>
> They are static so they can't contain any mutable fields but surely they
> can contain methods? And especially they should be able to contain
> static methods!?
>
>
>
What prevents you from using UFCS with enum members or templates with enum itself? (not tested)
January 26, 2017
On Thursday, 26 January 2017 at 06:40:59 UTC, drug wrote:
> 26.01.2017 09:32, Profile Anaysis пишет:
>> Why not make enum a comparable type to structs and classes?
>>
>> They are static so they can't contain any mutable fields but surely they
>> can contain methods? And especially they should be able to contain
>> static methods!?
>>
>>
>>
> What prevents you from using UFCS with enum members or templates with enum itself? (not tested)

This is one solution, but it would still be useful as an organizational tool to be able to put those methods in the enum's own namespace.
January 26, 2017
On Thursday, January 26, 2017 06:32:10 Profile Anaysis via Digitalmars-d wrote:
> Why not make enum a comparable type to structs and classes?
>
> They are static so they can't contain any mutable fields but surely they can contain methods? And especially they should be able to contain static methods!?

If you want an enum type with methods, use a struct type that has methods. Enums don't have to be integral types.

- Jonathan M Davis

January 26, 2017
V Thu, 26 Jan 2017 06:32:10 +0000
Profile Anaysis via Digitalmars-d <digitalmars-d@puremagic.com> napsáno:

> Why not make enum a comparable type to structs and classes?
> 
> They are static so they can't contain any mutable fields but surely they can contain methods? And especially they should be able to contain static methods!?
> 

struct EnumWithMethods
{
    @disable this();
    static enum Senum
    {
        one,
        two,
        three,
    }

    alias Senum this;

    static getOne()
    {
        return this.one;
    }
}

void main()
{
    import std.stdio;

    auto x = EnumWithMethods.one;
    auto y = EnumWithMethods.getOne();
    writeln(x);
    writeln(y);
}