Thread overview | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|
|
October 29, 2009 version specific enum members | ||||
---|---|---|---|---|
| ||||
Hi, is there a way to add members to an enum based on conditional compilation symbols. I tried
enum Tag {
A, B,
version (symbol) {
C, D,
}
E,
}
but it doesn't work. I know I could do
version (symbol) {
enum Tag { A, B, C, D, E }
} else {
enum Tag { A, B, E }
}
but I don't want to do that since in my case, there can be quite a few elements outside of the version, and I don't want to repeat them all.
--
Using Opera's revolutionary e-mail client: http://www.opera.com/mail/
|
October 29, 2009 Re: version specific enum members | ||||
---|---|---|---|---|
| ||||
Posted in reply to Phil Deets | Phil Deets wrote:
> Hi, is there a way to add members to an enum based on conditional compilation symbols. I tried
>
> enum Tag {
> A, B,
> version (symbol) {
> C, D,
> }
> E,
> }
>
> but it doesn't work. I know I could do
>
> version (symbol) {
> enum Tag { A, B, C, D, E }
> } else {
> enum Tag { A, B, E }
> }
>
> but I don't want to do that since in my case, there can be quite a few elements outside of the version, and I don't want to repeat them all.
>
>
Unfortunately, that's going to be about the best you can do, unless you're willing to play with string mixins and their ilk.
|
October 29, 2009 Re: version specific enum members | ||||
---|---|---|---|---|
| ||||
Posted in reply to Ellery Newcomer | Ellery Newcomer wrote:
> Phil Deets wrote:
>> Hi, is there a way to add members to an enum based on conditional
>> compilation symbols. I tried
>>
>> enum Tag {
>> A, B,
>> version (symbol) {
>> C, D,
>> }
>> E,
>> }
>>
>> but it doesn't work. I know I could do
>>
>> version (symbol) {
>> enum Tag { A, B, C, D, E }
>> } else {
>> enum Tag { A, B, E }
>> }
>>
>> but I don't want to do that since in my case, there can be quite a few
>> elements outside of the version, and I don't want to repeat them all.
>>
>>
>
> Unfortunately, that's going to be about the best you can do, unless
> you're willing to play with string mixins and their ilk.
Or unless you create an enhancement request. That seems a very valid one.
|
October 29, 2009 Re: version specific enum members | ||||
---|---|---|---|---|
| ||||
Posted in reply to Ary Borenszweig | On Thu, 29 Oct 2009 18:28:12 -0500, Ary Borenszweig <ary@esperanto.org.ar> wrote:
> Ellery Newcomer wrote:
>> Phil Deets wrote:
>>> Hi, is there a way to add members to an enum based on conditional
>>> compilation symbols. I tried
>>>
>>> enum Tag {
>>> A, B,
>>> version (symbol) {
>>> C, D,
>>> }
>>> E,
>>> }
>>>
>>> but it doesn't work. I know I could do
>>>
>>> version (symbol) {
>>> enum Tag { A, B, C, D, E }
>>> } else {
>>> enum Tag { A, B, E }
>>> }
>>>
>>> but I don't want to do that since in my case, there can be quite a few
>>> elements outside of the version, and I don't want to repeat them all.
>>>
>>>
>> Unfortunately, that's going to be about the best you can do, unless
>> you're willing to play with string mixins and their ilk.
>
> Or unless you create an enhancement request. That seems a very valid one.
Done (on the main D list).
|
October 30, 2009 Re: version specific enum members | ||||
---|---|---|---|---|
| ||||
Posted in reply to Phil Deets |
Phil Deets wrote:
> Hi, is there a way to add members to an enum based on conditional compilation symbols. I tried
>
> enum Tag {
> A, B,
> version (symbol) {
> C, D,
> }
> E,
> }
>
> but it doesn't work. I know I could do
>
> version (symbol) {
> enum Tag { A, B, C, D, E }
> } else {
> enum Tag { A, B, E }
> }
>
> but I don't want to do that since in my case, there can be quite a few elements outside of the version, and I don't want to repeat them all.
template Version(char[] ident)
{
mixin(`version(`~ident~`) const Version = true;
else const Version = false;`);
}
char[] genEnum(bool flag1, bool flag2)
{
return "A, B, "
~ (flag1 ? "C, D, " : "")
~ "E, F, "
~ (flag2 ? "G, H, " : "")
~ "G, ";
}
mixin(genEnum( Version!(`symbol`), Version!(`somethingElse`) ));
... is about the best you can do, I think.
|
October 30, 2009 Re: version specific enum members | ||||
---|---|---|---|---|
| ||||
Posted in reply to Daniel Keep | On Fri, 30 Oct 2009 00:03:23 -0500, Daniel Keep <daniel.keep.lists@gmail.com> wrote: > > > Phil Deets wrote: >> Hi, is there a way to add members to an enum based on conditional >> compilation symbols. I tried >> >> enum Tag { >> A, B, >> version (symbol) { >> C, D, >> } >> E, >> } >> >> but it doesn't work. I know I could do >> >> version (symbol) { >> enum Tag { A, B, C, D, E } >> } else { >> enum Tag { A, B, E } >> } >> >> but I don't want to do that since in my case, there can be quite a few >> elements outside of the version, and I don't want to repeat them all. > > template Version(char[] ident) > { > mixin(`version(`~ident~`) const Version = true; > else const Version = false;`); > } > > char[] genEnum(bool flag1, bool flag2) > { > return "A, B, " > ~ (flag1 ? "C, D, " : "") > ~ "E, F, " > ~ (flag2 ? "G, H, " : "") > ~ "G, "; > } > > mixin(genEnum( Version!(`symbol`), Version!(`somethingElse`) )); > > ... is about the best you can do, I think. Hey, thanks for the idea. I worked with it a little bit to remove the generator function and use multiline strings. This is what I came up with. mixin(q"ENUM enum Tag { A, B, ENUM"~(Version!("symbol")?q"ENUM C, D, ENUM":"")~q"ENUM E, } ENUM"); That's not pretty, but it's good enough for me. |
October 30, 2009 Re: version specific enum members | ||||
---|---|---|---|---|
| ||||
Posted in reply to Phil Deets | Phil Deets wrote:
> On Thu, 29 Oct 2009 18:28:12 -0500, Ary Borenszweig <ary@esperanto.org.ar> wrote:
>
>> Ellery Newcomer wrote:
>>> Phil Deets wrote:
>>>> Hi, is there a way to add members to an enum based on conditional
>>>> compilation symbols. I tried
>>>>
>>>> enum Tag {
>>>> A, B,
>>>> version (symbol) {
>>>> C, D,
>>>> }
>>>> E,
>>>> }
>>>>
>>>> but it doesn't work. I know I could do
>>>>
>>>> version (symbol) {
>>>> enum Tag { A, B, C, D, E }
>>>> } else {
>>>> enum Tag { A, B, E }
>>>> }
>>>>
>>>> but I don't want to do that since in my case, there can be quite a few
>>>> elements outside of the version, and I don't want to repeat them all.
>>>>
>>>>
>>> Unfortunately, that's going to be about the best you can do, unless
>>> you're willing to play with string mixins and their ilk.
>>
>> Or unless you create an enhancement request. That seems a very valid one.
>
> Done (on the main D list).
I meant a bugzilla enhancement, otherwise it'll get lost in the newsgroups.
|
October 30, 2009 Re: version specific enum members | ||||
---|---|---|---|---|
| ||||
Posted in reply to Ary Borenszweig | On Fri, 30 Oct 2009 06:38:44 -0500, Ary Borenszweig <ary@esperanto.org.ar> wrote:
> Phil Deets wrote:
>> On Thu, 29 Oct 2009 18:28:12 -0500, Ary Borenszweig <ary@esperanto.org.ar> wrote:
>>
>>> Ellery Newcomer wrote:
>>>> Unfortunately, that's going to be about the best you can do, unless
>>>> you're willing to play with string mixins and their ilk.
>>>
>>> Or unless you create an enhancement request. That seems a very valid one.
>> Done (on the main D list).
>
> I meant a bugzilla enhancement, otherwise it'll get lost in the newsgroups.
Well, I wanted to gauge support for the idea. It turns out I found a string mixin workaround that works; so it isn't critical for me now.
|
Copyright © 1999-2021 by the D Language Foundation