#include <tuple>
#include <iostream>
struct Dr
{
int a;
};
struct Mg
{
int b;
};
struct Msg
{
Dr dr;
Mg mg;
};
class MsgBuilder
{
public:
Msg addData(const Dr& dr)
{
std::cout << "Dr" << std::endl;
msg.dr = dr;
return msg;
}
Msg addData(const Mg& mg)
{
std::cout << "Mg" << std::endl;
msg.mg = mg;
return msg;
}
Msg msg;
};
int main()
{
Dr dr{10};
Mg mg{20};
MsgBuilder builder;
std::apply([&builder](auto&&... args) { (builder.addData(args), ...); }, std::make_tuple(dr, mg));
std::cout << builder.msg.dr.a << ", " << builder.msg.mg.b << std::endl;
return 0;
}