Кажется, ты слишком усложняешь мне проблему.Если вам нужно использовать std::tie
, вы можете просто использовать его.Нет необходимости изменять вашу структуру:
struct Transaction
{
int deducted;
int transferred;
};
// later...
auto t = std::tie(transaction.deducted, transaction.transferred);
Если вы часто используете этот шаблон, вы можете обернуть его небольшим вспомогательным методом:
struct Transaction
{
int deducted;
int transferred;
auto to_tuple() const
{
return std::tie(deducted, transferred);
}
};
Вы также можете использоватьэто назначить нескольким переменным одновременно, хотя я настоятельно не рекомендую это.Это подвержено ошибкам и приводит к хрупкому коду.(Например, если вы поменяете порядок deduct
и transfer
в приведенном ниже примере, вы получите ошибку, но компилятор не выдаст предупреждение или ошибку.)
void test(int& deduct, int& transfer)
{
std::tie(deduct, transfer) = makeTheTransaction().to_tuple();
}
Редактировать: Если подумать ...
Если цель здесь - просто разложить структуру на переменные, вы можете сделать это напрямую и избежать использования пар или кортежей:
struct Transaction
{
int deducted;
int transferred;
void decompose(int* deducted_, int* transferred_)
{
*deducted_ = deducted;
*transferred_ = transferred;
}
};
void test(int& deduct, int& transfer)
{
makeTheTransaction().decompose(&deduct, &transfer);
}
Это все еще хрупко, но, по крайней мере, теперь вы получите intellisense, когда напишите вызов метода decompose
, что сделает шаблон немного менее подверженным ошибкам.