Thread overview | ||||||||
---|---|---|---|---|---|---|---|---|
|
June 22, 2004 interface/template/class public/private issue | ||||
---|---|---|---|---|
| ||||
Can someone point out my error here?
--[test2.d]--
module test2;
interface A {
public:
void fn();
private:
void doStuff();
}
template B() {
public:
void fn() {
doStuff();
}
private:
ulong length = 0;
}
class C : A {
mixin B;
public:
private:
void doStuff() {
length = 10;
}
}
void main() {
}
D:\D\src\build>dmd test2.d
test2.d(19): class C B!().length is private
What does the mixin do to the public/private state/scope?
Regan.
--
Using M2, Opera's revolutionary e-mail client: http://www.opera.com/m2/
|
June 23, 2004 Re: interface/template/class public/private issue | ||||
---|---|---|---|---|
| ||||
Posted in reply to Regan Heath | In article <opr90s39am5a2sq9@digitalmars.com>, Regan Heath says... > >What does the mixin do to the public/private state/scope? mixin works the same way as import, so 'private' delineates stuff that's not accessible outside the mixin itself. Sean |
June 23, 2004 Re: interface/template/class public/private issue | ||||
---|---|---|---|---|
| ||||
Posted in reply to Sean Kelly | On Wed, 23 Jun 2004 00:02:17 +0000 (UTC), Sean Kelly <sean@f4.ca> wrote: > In article <opr90s39am5a2sq9@digitalmars.com>, Regan Heath says... >> >> What does the mixin do to the public/private state/scope? > > mixin works the same way as import, so 'private' delineates stuff that's not accessible outside the mixin itself. Ahh. ok, but doesn't that mean I have to split my mixin into 2 mixins in order to mix some of it as private and some as public i.e. template FooPrivate { int a; } template FooPublic { int b; } class Bar { private: mixin FooPrivate; public: mixin FooPublic; } instead of simply being able to go: template Foo { private: int a; public: int b; } class Bar { mixin Foo; } Regan -- Using M2, Opera's revolutionary e-mail client: http://www.opera.com/m2/ |
June 24, 2004 mixin public/private (Re: interface/template/class public/private issue) | ||||
---|---|---|---|---|
| ||||
Posted in reply to Regan Heath | In fact.. I cannot seem to work out how to mixin something giving it 'private' access. eg. template md() { uint[4] context = [ 0,1,2,3 ]; } struct md5 { mixin md; void foo() { context[0] = 1; } } void main() { md5 m; m.context[1] = 3; } I want the foo fn in md5 to be able to access context, but main not to be able to. I tried every permutation of adding public private to various places, no luck. Help! Regan. On Wed, 23 Jun 2004 13:25:41 +1200, Regan Heath <regan@netwin.co.nz> wrote: > On Wed, 23 Jun 2004 00:02:17 +0000 (UTC), Sean Kelly <sean@f4.ca> wrote: >> In article <opr90s39am5a2sq9@digitalmars.com>, Regan Heath says... >>> >>> What does the mixin do to the public/private state/scope? >> >> mixin works the same way as import, so 'private' delineates stuff that's not accessible outside the mixin itself. > > Ahh. ok, but doesn't that mean I have to split my mixin into 2 mixins in order to mix some of it as private and some as public i.e. > > template FooPrivate { > int a; > } > > template FooPublic { > int b; > } > > class Bar { > private: > mixin FooPrivate; > public: > mixin FooPublic; > } > > > instead of simply being able to go: > > template Foo { > private: > int a; > public: > int b; > } > > class Bar { > mixin Foo; > } > > Regan > -- Using M2, Opera's revolutionary e-mail client: http://www.opera.com/m2/ |
Copyright © 1999-2021 by the D Language Foundation