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, Cstd::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@lists.isocpp.org> 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@lists.isocpp.org>:
--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@lists.isocpp.org> wrote:
--I believe, everyone, who works with enums, write some functions for this particular enum only.Hi.Since C++11 we have lambdas.
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
}
Std-Proposals mailing list
Std-Proposals@lists.isocpp.org
https://lists.isocpp.org/mailman/listinfo.cgi/std-proposals
Std-Proposals mailing list
Std-Proposals@lists.isocpp.org
https://lists.isocpp.org/mailman/listinfo.cgi/std-proposals
Std-Proposals mailing list
Std-Proposals@lists.isocpp.org
https://lists.isocpp.org/mailman/listinfo.cgi/std-proposals