Home » Community » Newbie corner » Order of member initialization
Re: Order of member initialization [message #58872 is a reply to message #58871] |
Tue, 20 September 2022 18:27 |
jjacksonRIAB
Messages: 220 Registered: June 2011
|
Experienced Member |
|
|
Quote:
I cannot discuss this, multiple inheritance is too advanced for me.
I hear you.
It got even crazier than that though. I realized I could also combine it with variadic templates and came up with this monstrosity:
#include <iostream>
using namespace std;
struct BaseA {
int a { 100 };
int b { 200 };
int c { 300 };
auto& BaseARef() { return *this; }
};
struct BaseB {
BaseA& baseA;
BaseB(BaseA& baseA) : baseA(baseA) {
std::cout << baseA.a << "\n";
}
};
struct BaseC {
BaseA& baseA;
BaseC(BaseA& baseA) : baseA(baseA) {
std::cout << baseA.b << "\n";
}
};
struct BaseD {
BaseA& baseA;
BaseD(BaseA& baseA) : baseA(baseA) {
std::cout << baseA.c << "\n";
}
};
template<typename ...Args>
struct Whatever : BaseA, Args... {
Whatever() : Args(BaseARef())... {}
};
using Test = Whatever<BaseB, BaseC, BaseD>;
int main(void) {
Test whatever;
}
which prints:
I mean it's kind of neat because you can use one struct as a data holder for the other ones that all of them have access to but I'm unsure whether I'd use it in production code. The other thing that's cool about it is you can kind of change the initialization order by swapping their positions around in the using statement:
using Test = Whatever<BaseD, BaseC, BaseB>;
prints
instead
[Updated on: Tue, 20 September 2022 18:32] Report message to a moderator
|
|
|
|
|
Order of member initialization
By: Tom1 on Tue, 20 September 2022 11:19
|
|
|
Re: Order of member initialization
By: Tom1 on Tue, 20 September 2022 13:29
|
|
|
Re: Order of member initialization
By: peterh on Tue, 20 September 2022 15:19
|
|
|
Re: Order of member initialization
By: peterh on Tue, 20 September 2022 16:47
|
|
|
Re: Order of member initialization
By: Tom1 on Tue, 20 September 2022 17:05
|
|
|
Re: Order of member initialization
|
|
|
Re: Order of member initialization
By: peterh on Tue, 20 September 2022 17:48
|
|
|
Re: Order of member initialization
|
|
|
Re: Order of member initialization
By: peterh on Tue, 20 September 2022 22:59
|
|
|
Re: Order of member initialization
By: Tom1 on Wed, 21 September 2022 09:55
|
|
|
Re: Order of member initialization
By: peterh on Wed, 21 September 2022 11:49
|
|
|
Re: Order of member initialization
By: peterh on Wed, 21 September 2022 12:37
|
|
|
Re: Order of member initialization
By: peterh on Wed, 21 September 2022 15:11
|
|
|
Re: Order of member initialization
|
|
|
Re: Order of member initialization
By: peterh on Fri, 23 September 2022 00:26
|
|
|
Re: Order of member initialization
|
|
|
Re: Order of member initialization
By: peterh on Fri, 23 September 2022 01:13
|
|
|
Re: Order of member initialization
|
|
|
Re: Order of member initialization
By: peterh on Fri, 23 September 2022 01:33
|
|
|
Re: Order of member initialization
|
Goto Forum:
Current Time: Wed May 08 13:02:28 CEST 2024
Total time taken to generate the page: 0.02003 seconds
|