3 ms·
Can you name the variants to distinguish two variants which "carry" the same types? It wouldn't be as useful if you can't express something like: enum Con
by tomjakubowski 11y ago
Can you name the variants to distinguish two variants which "carry" the same types? It wouldn't be as useful if you can't express something like:
enum ConnState {
Disconnected,
Connecting,
Connected(net::TcpSocket),
Transferring(net::TcpSocket),
}
- jeremiep 11y agoI would probably do it like this in D (disclaimer: I haven't tested this code!) import std.typecons; import std.socket; import std.variant; struct Disconnected {} struct Connecting {} alias Connected = Typedef!(TcpSocket, null, "connected"); alias Transferring = Typedef!(TcpSocket, null, "transferring"); alias ConnState = Algebraic!(Disconnected, Connecting, Connected, Transferring); You could use plain structs instead of the typedef template for the same result.
- p0nce 11y agoI see what you mean. You can create such new types with std.typecons.Typedef https://dlang.org/phobos/std_typecons.html#.Typedef https://dlang.org/phobos/std_typecons.html#.Typedef Though it's less pretty.