Thread overview | ||||||||
---|---|---|---|---|---|---|---|---|
|
August 06, 2014 alias to fully qualified enum in scope where enum is expected | ||||
---|---|---|---|---|
| ||||
Attachments:
| Is there a simple way to to do this? enum A{ a1, a2 } void fun(A a){...} void test(){ fun(A.a1); //works fun(a1); //I'd like a1 to work, but just where an A is expected to avoid polluting namespace. } |
August 06, 2014 Re: alias to fully qualified enum in scope where enum is expected | ||||
---|---|---|---|---|
| ||||
Posted in reply to Timothee Cour | On 6/08/2014 6:11 p.m., Timothee Cour via Digitalmars-d-learn wrote:
> Is there a simple way to to do this?
>
> enum A{
> a1,
> a2
> }
>
> void fun(A a){...}
> void test(){
> fun(A.a1); //works
> fun(a1); //I'd like a1 to work, but just where an A is expected to
> avoid polluting namespace.
> }
The magic of with statements!
enum A {
a1,
a2
}
void func(A a){}
void main(){
func(A.a1);
with(A) {
func(a1);
}
}
|
August 06, 2014 Re: alias to fully qualified enum in scope where enum is expected | ||||
---|---|---|---|---|
| ||||
Posted in reply to Rikki Cattermole | On Wednesday, 6 August 2014 at 07:23:32 UTC, Rikki Cattermole wrote:
> The magic of with statements!
>
> enum A {
> a1,
> a2
> }
>
> void func(A a){}
> void main(){
> func(A.a1);
> with(A) {
> func(a1);
> }
> }
And if you want to be *really* concise:
with (A) fun(a1);
|
August 06, 2014 Re: alias to fully qualified enum in scope where enum is expected | ||||
---|---|---|---|---|
| ||||
Posted in reply to Meta Attachments:
| Thanks, I know with statement could be used but I was hoping for a solution not involving adding syntax to call site. void fun(with(A){A a}, int b){...} //conceptually like this void test(){ int a1=1; fun(A.a1, a1); // would work fun(a1, a1); // would work } On Wed, Aug 6, 2014 at 8:22 AM, Meta via Digitalmars-d-learn < digitalmars-d-learn@puremagic.com> wrote: > On Wednesday, 6 August 2014 at 07:23:32 UTC, Rikki Cattermole wrote: > >> The magic of with statements! >> >> enum A { >> a1, >> a2 >> } >> >> void func(A a){} >> void main(){ >> func(A.a1); >> with(A) { >> func(a1); >> } >> } >> > > And if you want to be *really* concise: > > with (A) fun(a1); > |
August 06, 2014 Re: alias to fully qualified enum in scope where enum is expected | ||||
---|---|---|---|---|
| ||||
Posted in reply to Timothee Cour | On Wednesday, 6 August 2014 at 16:48:57 UTC, Timothee Cour via Digitalmars-d-learn wrote:
> Thanks, I know with statement could be used but I was hoping for a solution
> not involving adding syntax to call site.
If you control the declaration of the enum, you could write:
alias a1 = A.a1;
alias a2 = A.a2;
A bit tedious, but it works, and could be automated if need be.
|
August 06, 2014 Re: alias to fully qualified enum in scope where enum is expected | ||||
---|---|---|---|---|
| ||||
Posted in reply to Marc Schütz Attachments:
| On Wed, Aug 6, 2014 at 12:04 PM, via Digitalmars-d-learn < digitalmars-d-learn@puremagic.com> wrote: > On Wednesday, 6 August 2014 at 16:48:57 UTC, Timothee Cour via Digitalmars-d-learn wrote: > >> Thanks, I know with statement could be used but I was hoping for a >> solution >> not involving adding syntax to call site. >> > > If you control the declaration of the enum, you could write: > > alias a1 = A.a1; > alias a2 = A.a2; > > A bit tedious, but it works, and could be automated if need be. > yes, but that pollutes the scope, what I wanted was to only expose the aliases in places where A is expected, see motivational in previous message: void fun(with(A){A a}, int b){...} //conceptually like this void test(){ int a1=1; fun(A.a1, a1); fun(a1, a1); // first a1 refers to A.a1, second one to local variable int a1 } ok I guess this isn't possible using current semantics. |
Copyright © 1999-2021 by the D Language Foundation