digitalmars.D.learn - How do i depend on struct composition
- "Mariusz `shd` =?UTF-8?B?R2xpd2nFhHNraSI=?= <alienballance gmail.com> (35/35) Aug 22 2013 Let me try to illustrate my question by following pseudo-code:
Let me try to illustrate my question by following pseudo-code:
struct InnerA
{
/* .. */
void* ptr;
}
struct InnerB
{
/* .. */
void* ptr;
}
struct InnerC
{
void operate()
{
auto ptr = this-(void*).sizeof;
/* do something with pointer */
}
}
struct Compound(Inner)
{
Inner a_or_b;
InnerC c;
}
I need to pass "c" to some subsystem which shouldn't be aware of
"a_or_b"
However, subsystem should be able to call function
InnerB.operate() which needs access to "a_or_b".
Now my questions:
* Is there any way to tell subsystem, that he can't instantiate
nor move InnerC
* Is there any better,platform-independent way of accessing
pointer from struct a_or_b ?
Thanks in advance,
Mariusz
Aug 22 2013
On Thursday, 22 August 2013 at 21:07:27 UTC, Mariusz `shd`
Gliwiński wrote:
Let me try to illustrate my question by following pseudo-code:
struct InnerA
{
/* .. */
void* ptr;
}
struct InnerB
{
/* .. */
void* ptr;
}
struct InnerC
{
void operate()
{
auto ptr = this-(void*).sizeof;
/* do something with pointer */
}
}
struct Compound(Inner)
{
Inner a_or_b;
InnerC c;
}
I need to pass "c" to some subsystem which shouldn't be aware
of "a_or_b"
However, subsystem should be able to call function
InnerB.operate() which needs access to "a_or_b".
Now my questions:
* Is there any way to tell subsystem, that he can't instantiate
nor move InnerC
* Is there any better,platform-independent way of accessing
pointer from struct a_or_b ?
Thanks in advance,
Mariusz
If you actually nest InnerC inside Compound then it will contain
a pointer(using this) to the parent. You can then use `parent`
inside `operator` to access the parent which can access a_or_b.
if you need to return a member from a_or_b without going through
a_or_b then just wrap it.
I'm not sure exactly what you are trying to do but I think it can
easily be done with standard techniques.
Aug 22 2013
On Thursday, 22 August 2013 at 22:32:53 UTC, JS wrote:On Thursday, 22 August 2013 at 21:07:27 UTC, Mariusz `shd` Gliwiński wrote:[...][...]struct InnerC { void operate() { auto ptr = this-(void*).sizeof; /* do something with pointer */ } } struct Compound(Inner) { Inner a_or_b; InnerC c; }If you actually nest InnerC inside Compound then it will contain a pointer(using this) to the parent. You can then use `parent` inside `operator` to access the parent which can access a_or_b.I think you're thinking of nested classes[1] here. Nested structs[2] are a little different. A nested struct is associated with a function, not with another struct. (By the way, I guess you mean `outer` instead of `parent`.) [1] http://dlang.org/class.html#nested [2] http://dlang.org/struct.html#nested
Aug 22 2013
On Thursday, 22 August 2013 at 23:10:40 UTC, anonymous wrote:On Thursday, 22 August 2013 at 22:32:53 UTC, JS wrote:Your right, I don't know why there isn't an equivalent for structs. In any case, check out http://dpaste.dzfl.pl/7f086694 and http://www.digitalmars.com/d/archives/digitalmars/D/Nested_Structs_183295.html for a solutionOn Thursday, 22 August 2013 at 21:07:27 UTC, Mariusz `shd` Gliwiński wrote:[...][...]struct InnerC { void operate() { auto ptr = this-(void*).sizeof; /* do something with pointer */ } } struct Compound(Inner) { Inner a_or_b; InnerC c; }If you actually nest InnerC inside Compound then it will contain a pointer(using this) to the parent. You can then use `parent` inside `operator` to access the parent which can access a_or_b.I think you're thinking of nested classes[1] here. Nested structs[2] are a little different. A nested struct is associated with a function, not with another struct. (By the way, I guess you mean `outer` instead of `parent`.) [1] http://dlang.org/class.html#nested [2] http://dlang.org/struct.html#nested
Aug 22 2013








"JS" <js.mdnq gmail.com>