Во-первых, если в вашем классе так много учеников, что удвоение tie
проблематично, то в любом случае у вас может быть дизайнерский запах.
Я будет склонен соглашаться с тем, что это немного раздражает, но помните, что это не причина существования tie
. Нет такой вещи как "tie
"; «связать» здесь - это глагол, способ описать, как выражения «связываются» в то, что на самом деле является кортежем ссылок.
Вы, конечно, можете написать собственную замену для tie
, которая знает, как работают все соответствующие члены вашего класса, так что для этого не нужно выписывать дважды. Вы могли бы назвать это members_as_tuple
. Вам решать, хотите ли вы сделать это, так же, как и вам, стоит ли делать любую функцию, чтобы избежать какого-то конкретного дублированного кода.
Конечно, хотя, без размышлений, C ++ не может сделать это для вас в общем случае, поэтому такая возможность не предоставляется "из коробки".
tl; dr: Вы уже показали лучший (только?) Способ сделать это, но я бы не назвал это make_tie
.
Что касается того, почему люди не делают этого больше, ну, это неопровержимо. Они, вероятно, просто не думали об этом или не думали, что им это нужно, и, вероятно, были правы.