Thread overview | ||||||
---|---|---|---|---|---|---|
|
March 18, 2014 enum question | ||||
---|---|---|---|---|
| ||||
I would like to use enums with elements that are either a struct type or a class type. However, using struct type seems inefficient because structs are pass by value. Apparently you can't pass an enum as a reference, so eliminating the pass by value for enums does not seem possible. I have read on this forum that someday enums may be able to be made with class elements. Can enums be made of classes yet, or is there a way to make the enum based on structs more efficient? Thanks, Eric |
March 18, 2014 Re: enum question | ||||
---|---|---|---|---|
| ||||
Posted in reply to Eric | On Tuesday, 18 March 2014 at 20:40:36 UTC, Eric wrote: > However, using struct type seems inefficient because structs are pass by value. That's not necessarily a problem, especially if the struct is small, passing by value is faster than by reference. What is your code trying to do? > Can enums be made of classes yet, or is there a way to make the enum based on structs more efficient? enums can't be classes, but you could make a static class constructed at compile time and pass that reference around. |
March 18, 2014 Re: enum question | ||||
---|---|---|---|---|
| ||||
Posted in reply to Adam D. Ruppe | On Tuesday, 18 March 2014 at 20:56:45 UTC, Adam D. Ruppe wrote:
> On Tuesday, 18 March 2014 at 20:40:36 UTC, Eric wrote:
>> However, using struct type seems inefficient because structs are pass by value.
>
> That's not necessarily a problem, especially if the struct is small, passing by value is faster than by reference.
>
> What is your code trying to do?
>
>> Can enums be made of classes yet, or is there a way to make the enum based on structs more efficient?
>
> enums can't be classes, but you could make a static class constructed at compile time and pass that reference around.
Hmmm... What do you think the crossover point is for performance
of value vs reference? ie, how large can a struct be before
passing it around gets slower than passing around a reference?
(I would guess 8 bytes, but that's just a guess).
I am trying to emulate the java enum type. Enums are great for data
safety in API design. The more immutable data they contain the
better in my opinion - hence my concern about performance.
-Eric
|
March 18, 2014 Re: enum question | ||||
---|---|---|---|---|
| ||||
Posted in reply to Eric | On 03/18/2014 01:40 PM, Eric wrote: > Apparently you can't pass an enum as a reference, It is possible as seen in the following code. > I have read on this forum that someday enums may be able to be > made with class elements. Someday is today! :) class C { int i; this(int i) { this.i = i; } } enum E : C { one = new C(1), two = new C(2) } void foo(ref E e) { e = E.two; } void main() { auto e = E.one; foo(e); assert(e == E.two); } Ali |
Copyright © 1999-2021 by the D Language Foundation