Вопрос

Я мигрирую несколько C ++ из структур к классам.

Я использовал структуры в основном для оптимизации битовых полей, которые мне больше не нужны (я больше беспокоюсь о скорости, чем экономия пространства).

  • Каковы общие руководящие принципы для выполнения этой миграции? Я все еще на этапе планирования, так как это очень большой ход, влияющий на большую часть кода. Я хочу спланировать все первым, прежде чем делать это. Каковы все необходимые вещи, которые я должен помнить?
Это было полезно?

Решение

Я не могу назвать все Основные вещи, но я могу назвать один: инкапсуляция.

Единственная техническая разница в C ++ между структурой и классом является доступом по умолчанию. В структуре все публично по умолчанию; В классе все частное. Я предполагаю, что вы говорите о структурах стручка здесь, где все публично.

Что я бы сделал, это это:

  1. Изменить struct ключевое слово в class и посмотрите, где вызов кода разрывается. Это даст вам подсказку о том, какие части типа используются где.
  2. Из этого определите, какие элементы типа должны быть публичными, которые должны быть частными.
  3. Вспомогательные функции Accessior для публичных частей и измените требующий код вызова для их использования.
  4. Переместите код, который нуждается в доступе к частным частям в сам класс.

Другие советы

При обновлении устаревшего кодовой базы из C до C ++, мой опыт существует очень мало значений и совершенно слишком много усилий, участвующих в фактическом риверификации вашего приложения для преобразования структур к традиционным объектам C ++. Потому что не ошибиться, это то, что вы закончите делать. Это не кажется, что это на самом деле, но в конечном итоге вы будете реализовать, вы перепроектируете приложение.

Вы не говорите достаточно о том, что являются вашими целями, поэтому, возможно, это ваша цель, но если вы просто пытаетесь преобразовать в C ++, поэтому новый код в вашем приложении может быть C ++, просто переименуйте файлы, добавить кучу отлитых где неявные преобразования из пустоты * были ранее, и двигаться дальше с вашей жизнью.

Нет значимой разницы между структурами и классами в C ++ (они отличаются только видимостью по умолчанию). Я не удосужился перенести структуры в классы, если только вы также не собираетесь добавить значимое поведение.

Первый, Я присоединяюсь к другим и говорю, что перемещение всего кода из структур к классам, не может быть лучшим ходом. Если бы вы делали это хорошо (то есть больше, чем просто изменение struct X { с участием class X { public:) это означает перепроектирование приложения (более или менее полного перезаписи).

Это включает в себя введение новых ошибок, новых циклов разработки, дополнительные тестирования, изменение документации и тд.

Второй, Учитывая, что у вас могут быть достоверные причины для этого (для меня «просто для удовольствия» и «чтобы увидеть, смогу ли я сделать это», могут быть достоверными причинами в некоторых ситуациях: D) Вот мои ответы на ваши вопросы:

1. What are the general guidelines for doing this migration?
2. What are all the essential things I should keep in mind?

Руководящие принципы и вещи, чтобы иметь в виду:

  • Работа в очень маленьких итерациях, и убедитесь, что приложение функционально между итерациями. Если у вас определены тесты подразделений, вы можете пройти через них проход (выберите одну единицу, перенаправить следующую набор шагов (см. Ниже), а затем адаптируйте и запустите тесты.

  • Выберите одну область вашего кода и закончите его.

  • Попробуйте выполнить эти шаги для каждого изменения:

    • Анализировать функциональность и редизайн
    • Создайте новую реализацию параллельно со старым
    • Переключитесь в новую реализацию везде старый используется
    • Проверьте, что приложение по-прежнему работает
    • Удалить старый код
    • Проверьте, что приложение по-прежнему работает
  • Если вы не делаете это в данный момент, Начните использовать развлекательное программное обеспечение для управления источником. Отказ Ничего менее нерезая это. Я рекомендую Mercurial, но я понимаю Git имеет одинаковые функции. Вы можете поблагодарить меня позже: O).

  • Выполнить изменения транзакции (Начните с одной области и закончите его, не добавляя изменений из других областей, в то время как изменения в первую очередь на полпути). Если вы используете ветвящий источник-контроль и несколько разработчиков, вы можете получить одно изменение / область на разработчик за раз, затем централизовать изменения.

Преимущества методологии рефакторизации:

  • Приложение остается функциональным, если вы решили на полпути, что усилия не стоит (или если руководство решает усилия, не стоит того)

  • Стабильность приложения остается управляемыми путем изменений

Если вы устанавливаете некоторые вехи, это должно быть вполне управляется.

Удачи!

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top