śr., 7 paź 2020 o 09:22 Rainer Deyke via Boost
struct Person { std::string firstName; std::string lastName; int age; };
struct Employee : Person { double salary; };
struct Prisoner : Person { int cellNumber; }; ``` This (a) avoids duplication, and (b) I have the slicing do exactly what I need: convert an Employee to a Person. Now, I am disappointed with what C++17 did to aggregate initialization. My natural expectation would be
On 06.10.20 21:50, Andrzej Krzemienski via Boost wrote: that:
``` Employee e {"Bilbo", "Baggins", 111, 1000.00}; ``` Flattens the class hierarchy and initializes each of the four members. Apparently , the C++ committee has a different vision for it. But I have noticed that if I changed derivation into aggregation (as I indicated earlier), the "flat" part of FPR would do exactly what I needed.
Does that example really work? My expectation would be that flat reflection would try to break apart the std::strings, and fail with a compile-time error because std::string is not an aggregate.
If it does work, then flat reflection is a lot more useful than I had initially thought!
The following compiles and outputs "1 2 3 " on my GCC compiler: ``` struct A { int x, y; }; struct B { A a; int z; }; int main() { B b = {{1, 2}, 3}; boost::pfr::flat_for_each_field(b, [](auto const& field){ std::cout << field << " "; }); } ``` However, when I substitute strings for ints it no longer compiles. I am not sure if this is just a bug in the implementation or an inherent limitation of this library. Regards, &rzej;