Date: Wed, 12 Mar 2025 14:23:32 +1300
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
>
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
>
Received on 2025-03-12 01:23:47