Здравствуйте, Ночной Смотрящий, Вы писали:
V>>Любые шаблонные выверты уже рефакторятся без проблем в сколь угодно больших проектах. НС>Шаблон — штука текстовая. Получить нормальную метаинформацию можно только когда в него параметры подставлены. А до этого возможности по рефакторингу крайне ограничены.
У шаблона может быть базовый класс, могут быть собственные поля и методы, есть видимость других типов или свободных ф-ий, т.е. по многим вещам "видимость" прекрасная, по крайней мере в том объеме, в каком можно рефакторить генерики дотнета (т.е. в аналогичных сценариях параметрического полиморфизма) — возможности аналогичные.
Ну и Решарпер С++ в последних версиях выдаёт предупреждение, если в результате рефакторинга у нас может получиться некомпилирующийся код.
Например, где в дотнете принято при трансформации данных описывать акцессоры "по-месту" (навроде x => x.Y) для каждого уникального x, там в С++ ленивый программист может сделать некий шаблонный getY(x) и тогда, действительно, если у одного из типов переименовать поле Y, то потребуется ручное вмешательство затем. В тех случаях, где код будет написан в стиле дотнета (через лямбду с конкретными выводимыми типами по-месту), необходимых дополнительных действий не будет.
Понятно, что x => x.Y выглядит тривиально, это был лишь пример. В общем случае "оно" может быть не тривиальным, т.к. именно под нетривиальные объемы кода пишут те самые шаблоны "многоразового применения" — в этом их фишка.