В течение десятилетий я создавал функции, предоставляющие несколько значений, с помощью списка параметров:
void initialize (World& world, Monster& monster, Player& player)
{
world.load("worldFile.txt");
monster.load ("monsterFile.txt"); monster.setPos (100,0,0);
player.setPos (0,0,0);
}
C ++ 17, конечно, предоставляет кортежи, но это выглядит неэффективно:
std::tuple<World, Monster, Player> initialize ()
{
World world; Monster monster; Player player; //do loading etc.;
return {world, monster, player};
}
Но это должно быть хорошо (я думаю):
std::tuple<double, std::string> makeSomething ()
{
return {5.0, "someString"s};
}
В какой момент затраты на копирование становятся настолько высокими, что разумнее использовать опорные параметры, чем кортеж? или есть способ сделать auto initialize
версию эффективной?