Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.12.2010, 19:52   #1
Masarr
Новичок
Джуниор
 
Регистрация: 27.10.2010
Сообщений: 2
По умолчанию Inline Method пример кода..?

Кто может дать пример рефакторинга кода с помощью Встраивание метода Inline Method...??

Пример кода небольшой до и после рефакторинга!
Masarr вне форума Ответить с цитированием
Старый 02.12.2010, 21:36   #2
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

Возьмите любой метод, скопируйте его тело в буфер обмена. Удалите теперь его из класса. А теперь на все возникающие ошибки компиляции замените вызов этого метода на код из буфера. Пользы от этого подхода я лично не вижу, разве что изначально кто-то всё подряд по методам разнёс и в итоге в классе миллион однострочных методов.
pu4koff вне форума Ответить с цитированием
Старый 03.12.2010, 11:12   #3
Blade
Software Engineer
Участник клуба
 
Аватар для Blade
 
Регистрация: 07.04.2007
Сообщений: 1,618
По умолчанию

Inline методы (да и просто функции) полезны в том случаи, если метод (функция) содержит не более двух-трех операторов и вызывается достаточно часто. При использовании inline функций не тратится время на передачу им аргументов, т.к. код функции подставляется компилятором в нужное место, но за счет этого увеличивает размер исполняемого файла программы.
Так же, замечу, что указание inline не является приказом для компилятора, т.е. он может не использовать функцию как inline, даже если вы его об этом попросите. Это зависит от конкретной реализации, например, некоторые компиляторы не делают функцию inline, если в ней используются циклы

Пример использования inline функций и методом можно посмотреть в любой (нормальной) книге по C\C++
Мужество есть лишь у тех, кто ощутил сердцем страх, кто смотрит в пропасть, но смотрит с гордостью в глазах. (с) Ария

Последний раз редактировалось Blade; 03.12.2010 в 11:14.
Blade вне форума Ответить с цитированием
Старый 03.12.2010, 12:18   #4
Гром
Старожил
 
Аватар для Гром
 
Регистрация: 21.03.2009
Сообщений: 2,193
По умолчанию

До:
Код:
int* arri = new int[ni];
for (int i = 0; i < ni; i++)
 arri[i] = 0;
//...
double* arrd = new double[nd];
for (int i = 0; i < nd; i++)
 arrd[i] = 0;
//...
complex* arrc = new complex[nc];
for (int i = 0; i < nc; i++)
 arrc[i] = 0;
После:
Код:
temlate<class T> void ZeroArray(T* arr, int n)
 {
 for (int i = 0; i < n; i++)
  arr[i] = 0;
 }
//...
int* arri = new int[ni];
ZeroArray(arri, ni);
//...
double* arrd = new double[nd];
ZeroArray(arrd, nd);
//...
complex* arrc = new complex[nc];
ZeroArray(arrc, nc);
Пример, конечно, надуманный, и, возможно, не слишком корректный, зато иллюстрирует, как примерно это должно выглядеть. Если есть повторяющиеся фрагменты кода - пихаем их в одну inline-функцию и потом вызываем в нужных местах. По идее генерируемый компилятором код не должен измениться, однако код на C++ сокращается в объеме и становится более наглядным.
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта
Тема на форуме, посвященная ему же
Гром вне форума Ответить с цитированием
Старый 03.12.2010, 12:55   #5
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

Blade, в данном случае имеется ввиду приём в рефакторинге, а не возможности языка С++ (тут всё правильно расписано). Хотя может автору это и нужно было и я неправильно понял
Гром, если я правильно понял товарища Masarr, то в приведённом Вами примере нужно поменять местами куски кода "До" и "После", т.к. в приёме рефакторинга "Inline Method" наоборот происходит избавление от отдострочных методов типа ZeroArray.
pu4koff вне форума Ответить с цитированием
Старый 03.12.2010, 13:55   #6
Гром
Старожил
 
Аватар для Гром
 
Регистрация: 21.03.2009
Сообщений: 2,193
По умолчанию

pu4koff, судя по логике рефакторинга код в процессе должен сокращаться и упрощаться, поэтому по идее нужно как раз убирать ненужное дублирование кода в inline-функцию. Впрочем, это уж пуская ТС смотрит, в какую сторону ему надо.
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта
Тема на форуме, посвященная ему же
Гром вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Пример кода для воспроизведения нот - частоты нот для 80-ти клавишного пианино mutabor Свободное общение 8 09.01.2010 23:48
IdHTTP.Post(); method not allowed rangel Работа с сетью в Delphi 3 01.11.2009 16:56
Method must have a return type????? Bobrik Помощь студентам 5 18.05.2009 18:09
SMTP + SSL пример кода dimonbest Работа с сетью в Delphi 8 15.08.2008 10:56