Visual Studio C ++: рефакторинг между функциями-членами и не-членами - PullRequest
2 голосов
/ 28 февраля 2011

У меня есть библиотека, и мне нужно провести рефакторинг класса X таким образом, чтобы каждый вызов формы:

f(x); //Non-member function

заменяется на:

x.f(); //Member function

где f - фиксированный метод (то же имя во всем коде), но x - это экземпляр типа X, и как таковой он изменится.

Есть ли какой-нибудь изощренный способ найти и заменить глобальный код, который бы позаботился о таких преобразованиях?

На всякий случай было бы интересно знать, как перейти от участника к участнику, не являющемуся членом:)

Спасибо!

Ответы [ 3 ]

3 голосов
/ 28 февраля 2011

Используйте компилятор, Люк.

Поскольку я не могу представить, как это можно сделать с помощью текстовой замены, и я очень сомневаюсь, что у вас есть инструмент рефакторинга, который делает это [*] для вас:

Просто измените определение класса соответствующим образом, чтобы предыдущая функция больше не была доступна. Затем пусть ваш компилятор скажет вам, где вам нужно заменить вызовы на несуществующую функцию.

[*]: На самом деле, я сомневаюсь, что существует какой-либо инструмент рефакторинга для C ++, способный достичь этого.

2 голосов
/ 28 февраля 2011

Невозможно представить, не без очень расширенного плагина / надстройки рефакторинга.Сначала это даже немного сложнее, чем вы ожидаете, потому что вы также хотели бы изменить любые вызовы, например x->f() на f(*x).Давайте даже не попадем в ситуацию, когда у вас есть указатели на методы ...

0 голосов
/ 28 февраля 2011

Найти и заменить, используя регулярные выражения и помеченные группы.

Затем вы можете заменить f\({:i}\) на \1.f() и f\(\*{:i}\) на \1->f()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...