I'm trying to make one class which requires member variables to be initialized first. I know why this happens, but is there a way around this?
Current print order: second first
Wanted print order: first second
#include <iostream>
struct A {
    A() {
        std::cout << "first" << '\n';
    }
};
struct B {
    B() {
        std::cout << "second" << '\n';
    }
};
struct C : public B {
    C() : a(), B() {
    }
    A a;
};
int main() {
    C c;
    return 0;
} 
                Stick your members that need initializing first in a struct and inherit privately from that, before B.
struct A {
    A() { std::cout << "first" << '\n'; }
};
struct B {
    B() { std::cout << "second" << '\n'; }
};
struct Members { A a; };
struct C : private Members, public B {
    C() : Members(), B() {}
};
int main() {
    C c;
} 
The downside with this is that there is no way to avoid exposing the "member struct" to the outside world, but that shouldn't be a problem in practice.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With