Есть ли способ, которым я могу напрямую заполнить эти переменные из вызова функции, я не хочу получать результат в std :: tuple, потому что get <0>, get <1> и т. Д. Снижает читаемость
Также, если я возьму возвращаемое значение в кортеже, а затем сохраню его в отдельных переменных, тогда я напрасно трачу кортеж, так как он не будет использоваться в коде
Я понимаю, что использование std::get<>()
снижает читабельность, но вы можете попытаться улучшить его с некоторыми комментариями
// get the size of the returned string (position 1)
auto sz = std::get<1>(getStringWithSizeAndCapacity());
В любом случае, мне кажется, что правильным способом улучшения читабельности является использование std::tie()
, и мне не ясно, что с ним не так, или (начиная с C ++ 17) также структурированное связывание декларации
auto [ s, sz, cpcty ] = getStringWithSizeAndCapacity();
Если вы не хотите называть неиспользуемые переменные (например, не заинтересованы в емкости), вы можете использовать std::ignore
std::string s;
int sz;
std::tie(s,sz,std::ignore) = getStringWithSizeAndCapacity();
К сожалению std::ignore
нельзя использовать (насколько я знаю) с новым структурированным связыванием C ++ 17 (может быть, что-то похожее с C ++ 20?).