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@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
}


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:
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@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