Thread overview
interface/template/class public/private issue
Jun 22, 2004
Regan Heath
Jun 23, 2004
Sean Kelly
Jun 23, 2004
Regan Heath
mixin public/private (Re: interface/template/class public/private issue)
Jun 24, 2004
Regan Heath
June 22, 2004
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
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
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
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/