Date: Tue, 11 Mar 2025 21:23:29 -0500
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();
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
>
> 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();
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 02:23:43