|
Boost : |
Subject: [boost] outer class `this` in local classes
From: Lorenzo Caminiti (lorcaminiti_at_[hidden])
Date: 2010-06-24 13:06:15
Hello all,
Is there a way to access the outer class `this` from a local class but
without using inheritance?
Let me explain with an example:
class x { // outer class
public:
void g() {}
void f() {
this->g(); // (1)
struct y: x { // local class *** using inheritance ***
y(x* super): x(*super) {} // (2)
void h() {
this->g(); // (3)
}
};
y(this).h();
}
};
*** Is there a way to do this but without inheriting `y` from `x`? ***
At line (3), the local class `y` can access the outer class `x::g()`
simply using `this` because `y` inherits from `x`. However, this
inheritance requires to construct another object `x` when `y` is
constructed as in line (2) adding runtime overhead and requiring `x`
to have an accessible copy constructor.
In my application, I need line (3) to essentially look like line (1)
so you can program code inside `y` members as if it were inside `x`
members. A part from that, the local class `y` could look as it is
needed to solve this problem -- with some member variables, other
member functions, etc. (For example, I tried to redefine
`y::operator->()`/`y::operator*()` to return a pointer/reference to
`x` but this does not work because `this->`/`*this` always retain its
pointer semantics and they do not use the user defined operators...)
Thank you very much.
-- Lorenzo
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk