C++ Logo

std-proposals

Advanced search

Re: [std-proposals] lambdas in enums

From: Tom Honermann <tom_at_[hidden]>
Date: Wed, 12 Mar 2025 13:04:25 -0400
On 3/11/25 10:23 PM, Jeremy Rifkin via Std-Proposals wrote:
> Hi,
>
> > Sorry, Jeremy, but there is no straight way to add a normal function
> into enum.
> The problem is: enum is enumeration. If you stop enumeration for a
> function, it would break the logic of the enum.
>
> An implementation developer can weight in about challenge with adding
> this to existing implementations but there is no reason C++ cannot
> support this. To elaborate on what I mean, imagine syntax along the
> following lines:
>
> enum class E {
> A, B, C
> std::string_view to_string(E value) { … }
> }
>
> E e = E::A;
> e.to_string();

I would use deducing this to support member function call syntax.

    enum class E {
       A, B, C;
    std::string_view to_string(this E value) { … }
    };
    E e = E::A;
    auto name = e.to_string();

Tom.

>
>
> Cheers,
> Jeremy
>
>
> On Tue, Mar 11, 2025 at 20:23 Dmitrii Shabalin via Std-Proposals
> <std-proposals_at_[hidden]> wrote:
>
> Hi.
> Sorry, Jeremy, but there is no straight way to add a normal
> function into enum.
> The problem is: enum is enumeration. If you stop enumeration for a
> function, it would break the logic of the enum.
>
> For me, the only way is accepting a value as a function.
>
> Actually, it might work too:
>
> std::string ToString( Test test) { if (value == testValue) return
> "testValue"; else return ""; }
>
> enum Test{
> testValue = 0,
> toString = ToString,
> max = testValue
> }
>
> std::cout << "Test value" << Test::toString(Test::testValue);
>
> but as you can see, it causes having a function in the different
> namespace.
>
> If you have any idea how to have a function inside in the enum,
> please, share your idea with an example.
>
> Kind regards,
> Dmitrii shabalin
>
>
> ср, 12 мар. 2025 г. в 12:32, Jeremy Rifkin via Std-Proposals
> <std-proposals_at_[hidden]>:
>
> Hi,
>
> It seems weird to add a special-case to just allow lambdas in
> enums like this. The syntax is confusing too, it resembles
> enum constant syntax and this isn't syntax that exists for
> other similar language constructs.
>
> I would much rather see enums get normal member functions like
> most other languages have.
>
> Cheers,
> Jeremy
>
>
> On Tue, Mar 11, 2025 at 6:20 PM Dmitrii Shabalin via
> Std-Proposals <std-proposals_at_[hidden]> wrote:
>
> Hi.
> Since C++11 we have lambdas.
> I believe, everyone, who works with enums, write some
> functions for this particular enum only.
> However, there is no way to associate this function with
> the enum's namespace.
> My idea: we can set a value for any of enum fields. It
> should be const and could be constexpr.
> May be, we can set a lambda for a field too?
> something like:
> enum Test{
> testValue = 0,
> toString =[](Test value) -> std::string { if (value ==
> testValue) return "testValue"; else return ""; },
> max = testValue
> }
>
> And usage will be something like:
> std::cout << "Test value" << Test::toString(Test::testValue);
> --
> Std-Proposals mailing list
> Std-Proposals_at_[hidden]
> https://lists.isocpp.org/mailman/listinfo.cgi/std-proposals
>
> --
> Std-Proposals mailing list
> Std-Proposals_at_[hidden]
> https://lists.isocpp.org/mailman/listinfo.cgi/std-proposals
>
> --
> Std-Proposals mailing list
> Std-Proposals_at_[hidden]
> https://lists.isocpp.org/mailman/listinfo.cgi/std-proposals
>
>

Received on 2025-03-12 17:04:27