|
Объявления, Как принято делать, и кто как реально делает. |
|
|
|
Oct 14 2009, 18:34
|
Гуру
     
Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521

|
Раньше у меня не было таких проблем. Обычно создавал группу файлов. Как правило все файлы были достаточно обособленными и я их объединял на этапе линковки. Если были групповые общие объявления, то я их делал в main, а в других объявлял как extern.
Проблема возникла в одном проекте. Он получил развитие и теперь существует в нескольких реинкарнациях с различными модификациями и процами. Тем не менее там есть очень крупные общие блоки. Столкнувшись, с проблемой поддержки - пришёл к необходимости общую часть исходников выделить в отдельные файлы/процедуры. А иначе, при внесении изменений приходилось править все проекты. Выделил и переписал, с учётом унификации.
А теперь вопрос. Эти блоки используют общие глобальные переменные. Как их правильно объявить, чтобы было удобнее использовать и поддерживать, а также было меньше разной писанины?
|
|
|
|
|
 |
Ответов
|
Oct 15 2009, 07:07
|
Местный
  
Группа: Свой
Сообщений: 252
Регистрация: 9-10-08
Из: Московская обл.
Пользователь №: 40 797

|
Вобщем-то, все что вы предлагаете можно и на С реализовать, не применяя классы. Абстрактный базовый класс? прототипы функций в .h-файле private-секция? static структура. Нужно несколько экземпляров одинакового модуля в рамках одного проекта? Передавайте указатель на эту структурку, преобразовав его к void*, дабы вызывающий код не лазил куда не следует (идиома pimpl). Несколько реализаций одного базового (абстрактного) класса, в данном конктретном случае, как я понял, не нужны, но и их при желании можно реализовать с помощью структуры с набором указателей на функции.
ИМХО в данном случае это лучше, т.к. перетащить большой готовый проект с С на С++ в одно действие не выйдет.
|
|
|
|
|
Oct 15 2009, 07:30
|

Adept
     
Группа: Свой
Сообщений: 3 469
Регистрация: 6-12-04
Из: Novosibirsk
Пользователь №: 1 343

|
Цитата(Flexz @ Oct 15 2009, 14:07)  Вобщем-то, все что вы предлагаете можно и на С реализовать, не применяя классы. Абстрактный базовый класс? прототипы функций в .h-файле private-секция? static структура. Нужно несколько экземпляров одинакового модуля в рамках одного проекта? Передавайте указатель на эту структурку, преобразовав его к void*, дабы вызывающий код не лазил куда не следует (идиома pimpl). Не берусь судить в целом, но советовать использовать void* ни в коем случае не стал бы. Работа через void* - это хак, и в если его где и оправдано применять, так не от хорошей жизни. Случаи использования void* надо сводить к минимуму, в идеале - к нулю. Цитата(Flexz @ Oct 15 2009, 14:07)  Несколько реализаций одного базового (абстрактного) класса, в данном конктретном случае, как я понял, не нужны, но и их при желании можно реализовать с помощью структуры с набором указателей на функции.
ИМХО в данном случае это лучше, т.к. перетащить большой готовый проект с С на С++ в одно действие не выйдет. Может и лучше. Но если уж оставаться на С, то и концепции С++ лучше не тащить, от них при ручной реализации будет больше проблем, чем пользы.
--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
|
|
|
|
Сообщений в этой теме
SasaVitebsk Объявления Oct 14 2009, 18:34 rezident Может стоит объединить переменные в глобальную стр... Oct 14 2009, 19:13 SasaVitebsk Цитата(rezident @ Oct 14 2009, 22:13) Мож... Oct 14 2009, 19:38  kurtis Цитата(SasaVitebsk @ Oct 14 2009, 22:38) ... Oct 14 2009, 21:32   SasaVitebsk Цитата(kurtis @ Oct 15 2009, 00:32) Попро... Oct 14 2009, 22:24   zltigo Цитата(kurtis @ Oct 15 2009, 00:32) Конст... Oct 14 2009, 22:41   dxp Цитата(kurtis @ Oct 15 2009, 04:32) Попро... Oct 15 2009, 04:18 sigmaN Не знаю правда ли, но я недавно прочел такую вещь:... Oct 14 2009, 19:25 sigmaN Ну тут, ИМХО, кроме Вас никто не решит проблему.
Я... Oct 14 2009, 19:43 Faradey как вариант, объедините специфические "переме... Oct 14 2009, 20:03 Dima_G Ранее тоже столкнулся с тем, что большая часть код... Oct 15 2009, 03:09 Dima_G Цитата(Flexz @ Oct 15 2009, 10:07) ИМХО в... Oct 15 2009, 07:19 Flexz ЦитатаНасчет приведения к (void*) - это путь для в... Oct 15 2009, 08:12 Dima_G Цитата(Flexz @ Oct 15 2009, 11:12) Это эл... Oct 15 2009, 08:42  zltigo Цитата(Dima_G @ Oct 15 2009, 11:42) Отком... Oct 15 2009, 12:22  demiurg_spb Цитата(Dima_G @ Oct 15 2009, 12:42) Кодvo... Oct 15 2009, 15:42   dxp Цитата(demiurg_spb @ Oct 15 2009, 22:42) ... Oct 16 2009, 03:08    demiurg_spb Цитата(dxp @ Oct 16 2009, 07:08) Что вас ... Oct 16 2009, 20:25     Dima_G Цитата(demiurg_spb @ Oct 17 2009, 00:25) ... Oct 17 2009, 08:07 Flexz По теме C vs C++ извините, но.. даже отвечать не х... Oct 15 2009, 08:55 SasaVitebsk Если бы изначально всё продумывалось, то такого бы... Oct 15 2009, 11:53 _Pasha Цитата(SasaVitebsk @ Oct 14 2009, 21:34) ... Oct 15 2009, 15:54 sigmaN Все на столько привыкли к препроцессору, что видим... Oct 16 2009, 06:23 Dog Pawlowa Структуры данных и передача указателей на структур... Oct 16 2009, 19:46 sigmaN Я вот тут призадумался...
А как бы нам так объявит... Oct 17 2009, 12:48 _Pasha Цитата(sigmaN @ Oct 17 2009, 15:48) Но ка... Oct 17 2009, 12:56 Rst7 ЦитатаЯ вот тут призадумался...
А как бы нам так о... Oct 17 2009, 13:24 sigmaN Цитатаю smile.gif Да все так же:
Ну я имел ввиду б... Oct 17 2009, 15:58 Rst7 ЦитатаНу я имел ввиду без использования препроцесс... Oct 17 2009, 17:19 sigmaN ЦитатаАх простите, я не понял.Ну это не удивительн... Oct 17 2009, 21:09
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|