class MotorStatic;
// Kapselt die Laufzeit-Daten, die im RAM landen sollen
class MotorRuntime {
friend class MotorStatic;
public:
constexpr MotorRuntime (int x, int y, int z) : m_x (x), m_y (y), m_z (z) {}
protected:
int m_x, m_y, m_z;
};
// Kapselt die fixen Parameter, die im Flash landen sollen
class MotorStatic {
public:
constexpr MotorStatic (int a, int b, int c, MotorRuntime& runtime) : m_a (a), m_b (b), m_c (c), m_runtime (runtime) {}
void regelalgorithmus () const {
m_runtime.m_x += m_a;
}
protected:
int m_a, m_b, m_c;
MotorRuntime& m_runtime;
};
MotorRuntime theMotorRuntime [3] { { 1, 2, 3 }, {4, 5, 6}, {7, 8, 9}};
constexpr MotorStatic theMotorStatic [3] { { 1, 2, 3, theMotorRuntime [0]},
{ 4, 5, 6, theMotorRuntime [2]},
{ 7, 8, 9, theMotorRuntime [3]}};
int main() {
for (const MotorStatic& ms : theMotorStatic) {
ms.regelalgorithmus ();
}
return 0;
}
Y2xhc3MgTW90b3JTdGF0aWM7Ci8vIEthcHNlbHQgZGllIExhdWZ6ZWl0LURhdGVuLCBkaWUgaW0gUkFNIGxhbmRlbiBzb2xsZW4KY2xhc3MgTW90b3JSdW50aW1lIHsKCWZyaWVuZCBjbGFzcyBNb3RvclN0YXRpYzsKCXB1YmxpYzoKCQljb25zdGV4cHIgTW90b3JSdW50aW1lIChpbnQgeCwgaW50IHksIGludCB6KSA6IG1feCAoeCksIG1feSAoeSksIG1feiAoeikge30KCXByb3RlY3RlZDoKCQlpbnQgbV94LCBtX3ksIG1fejsKfTsKCi8vIEthcHNlbHQgZGllIGZpeGVuIFBhcmFtZXRlciwgZGllIGltIEZsYXNoIGxhbmRlbiBzb2xsZW4KY2xhc3MgTW90b3JTdGF0aWMgewoJcHVibGljOgoJCWNvbnN0ZXhwciBNb3RvclN0YXRpYyAoaW50IGEsIGludCBiLCBpbnQgYywgTW90b3JSdW50aW1lJiBydW50aW1lKSA6IG1fYSAoYSksIG1fYiAoYiksIG1fYyAoYyksIG1fcnVudGltZSAocnVudGltZSkge30KCQl2b2lkIHJlZ2VsYWxnb3JpdGhtdXMgKCkgY29uc3QgewoJCQltX3J1bnRpbWUubV94ICs9IG1fYTsKCQl9Cglwcm90ZWN0ZWQ6CgkJaW50IG1fYSwgbV9iLCBtX2M7CgkJTW90b3JSdW50aW1lJiBtX3J1bnRpbWU7Cn07CgpNb3RvclJ1bnRpbWUgdGhlTW90b3JSdW50aW1lIFszXSB7IHsgMSwgMiwgMyB9LCB7NCwgNSwgNn0sIHs3LCA4LCA5fX07CmNvbnN0ZXhwciBNb3RvclN0YXRpYyB0aGVNb3RvclN0YXRpYyBbM10JeyB7IDEsIDIsIDMsIHRoZU1vdG9yUnVudGltZSBbMF19LAoJCQkJCQkJCQkJCXsgNCwgNSwgNiwgdGhlTW90b3JSdW50aW1lIFsyXX0sCgkJCQkJCQkJCQkJeyA3LCA4LCA5LCB0aGVNb3RvclJ1bnRpbWUgWzNdfX07CgppbnQgbWFpbigpIHsKCWZvciAoY29uc3QgTW90b3JTdGF0aWMmIG1zIDogdGhlTW90b3JTdGF0aWMpIHsKCQltcy5yZWdlbGFsZ29yaXRobXVzICgpOwoJfQoJcmV0dXJuIDA7Cn0=