Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 21, средняя оценка - 4.86
gulejop
0 / 0 / 0
Регистрация: 25.07.2013
Сообщений: 10
#1

Структура проекта - C++

18.08.2013, 02:12. Просмотров 3273. Ответов 10
Метки нет (Все метки)

Приветствую всех!
В общем интересует меня вот что: структура проектов с большим количеством файлов.
Обычно у меня один класс - один хедер и один или несколько cpp. Но когда проект разрастается, начинаются проблемы. Все усложняет огромное количество инклудов, хедеров и cpp. Приходится шаманить с pragma once, предварительными объявлениями, указателями на классы, экстернами и прочей ерундой.
Для связей между частями модульной структуры, меня одно время устраивал общий хедер куда инклудятся все другие хедеры проекта. К примеру:
C++
1
2
3
4
//file "common.h"
#include "class1.h"
#include "class2.h"
#include "class3.h"
C++
1
2
//file "class1.h"
#include "common.h"
C++
1
2
//file "class2.h"
#include "common.h"
C++
1
2
//file "class3.h"
#include "common.h"
Кто как делает, как лучше и правильней организовывать структуру крупного проекта?
Как составляется структура папок и файлов исходников?
Как правильно разместить класс в файлах (например, объявление class MyClass в .h, реализация MyClass::Method() в .cpp)?
Как что куда правильнее инклудить и т.д? Например де-то слышал, что нельзя инклудить хедер в хедер и т.д.

Ковырял исходники каких-то движков, чтобы посмотреть как это устроено там, но честно говоря, мало чем помогло...
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.08.2013, 02:12     Структура проекта
Посмотрите здесь:

Структура проекта - C++
Не так давно, мы с одним парнем решили накатать игру. Вопрос остается открытым, как нужно построить проект? Был вариант разделить классы...

Какая должна быть структура сложного (объемного) проекта? - C++
Работа программы начинается с выполнения функции main(). В самой программе куча функций и классов. Как организовать структуру достаточно...

Структура - C++
Вот: #include <iostream> using namespace std; enum etype {laborer, secretary, manager, accountant, executive, researcher}; ...

Структура - C++
Простой пример по Структуре в Turbo c++. Можете несколько вариантов) Тока простые. а то я не смогу училке обяснить.

Структура С++ - C++
Нужно решить задачу на С++.Условие:Известны максимальные скорости 20 моделей легковых автомобилей.Все значения выражены в км/ч.Напечатать...

Структура. - C++
Здравствуйте форумчане. Помогите с куском задачи. Имеется список участниц. и есть список опрошенных N штук которые называют трех...

структура :( - C++
Имеются сведения об m мастерских:название мастерской,количество работников,количество заказов.Определить количество мастерских с наибольшим...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
0x10
2459 / 1631 / 238
Регистрация: 24.11.2012
Сообщений: 4,011
18.08.2013, 07:49     Структура проекта #2
Цитата Сообщение от gulejop Посмотреть сообщение
Но когда проект разрастается, начинаются проблемы.
Какие конкретно? Из поста не ясно в чем проблема.
Цитата Сообщение от gulejop Посмотреть сообщение
Приходится шаманить с pragma once
Разве это шаманство? В каждом заголовочном файле должны быть include guards или pragma once. На этом все "шманство" и заканчивается.
Цитата Сообщение от gulejop Посмотреть сообщение
предварительными объявлениями
Нет в них ничего страшного.
Цитата Сообщение от gulejop Посмотреть сообщение
указателями на классы
Кэп-mode: указатели должны быть там, где должны быть указатели. Т.е. заниматься костылевтыканием и бездумно делать указатели "лишь бы хоть как-нибудь собралось" - странно.
Цитата Сообщение от gulejop Посмотреть сообщение
экстернами
А экстерны зачем? Наплодил глобальных переменных? Если так, то серьезный повод задуматься над тем, чтобы выкосить их нафиг.
Цитата Сообщение от gulejop Посмотреть сообщение
меня одно время устраивал общий хедер куда инклудятся все другие хедеры проекта
И небольшое изменение одном из заголовочных файлов стабильно ведет к пересборке всего проекта.
Цитата Сообщение от gulejop Посмотреть сообщение
Как составляется структура папок и файлов исходников?
В общем случае использую структуру:
Код
.
|-Bin
|-Build
|-Lib
`-Projects
    |-ProjectName1
    |   |-src
    |   |-tests
    |   `PublicHeader1.h
    `-ProjectName2
Цитата Сообщение от gulejop Посмотреть сообщение
Как правильно разместить класс в файлах (например, объявление class MyClass в .h, реализация MyClass::Method() в .cpp)?
Так и размещать. Исключение - шаблоны.
Цитата Сообщение от gulejop Посмотреть сообщение
Как что куда правильнее инклудить и т.д?
Подключать заголовочный файл нужно только там, где он действительно необходим. Где можно обойтись предварительным объявлением - его и использовать.
Пример:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
//! @file MyClass.h
#pragma once
 
#include "Base.h"
#include "Bar.h"
 
class Foo;
 
// Наследование - необходимо подключить Base.h
class MyClass : public Base
{
public:
    MyClass();
    ~MyClass();
 
public: // Base
    virtual void f();
 
private:
    Foo* foo_; // указатель. Достаточно предварительного объявления.
    Bar bar_; // необходимо подключить Bar.h
};
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
//! @file MyClass.cpp
 
#include "MyClass.h"
 
#include "Foo.h"
 
MyClass::MyClass()
: foo_{new Foo()}
{ }
 
MyClass::~MyClass()
{
    delete foo_;
}
 
void MyClass::f()
{
    foo_->g(); // используется метод класса Foo, необходимо подключить Foo.h
}
gulejop
0 / 0 / 0
Регистрация: 25.07.2013
Сообщений: 10
18.08.2013, 11:17  [ТС]     Структура проекта #3
Спасибо за ответ!
Я говорю про довольно сложные иерархичные архитектуры классов. Вот например как в этом видео:
http://www.youtube.com/watch?v=V1MHyn4YOWE Можно сразу перемотать на 13:40 там понятно о чем речь.
Где можно почитать про тонкости реализации архитектур такого рода?
0x10
2459 / 1631 / 238
Регистрация: 24.11.2012
Сообщений: 4,011
18.08.2013, 11:25     Структура проекта #4
Посмотрел пару минут видео... Не понял проблемы.
Ну свалили они все классы в один. Чтобы не светить все кишки, добавили интерфейс и навернули фабрику (http://ru.wikipedia.org/wiki/%D0%A4%...BD%D0%B8%D1%8F).

Т.е. вопросы проектирования архитектуры - это одно, а организация файлов в проекте - это другое. Если интересуют паттерны, можно почитать GoF, например...
gulejop
0 / 0 / 0
Регистрация: 25.07.2013
Сообщений: 10
18.08.2013, 18:57  [ТС]     Структура проекта #5
Цитата Сообщение от 0x10 Посмотреть сообщение
Посмотрел пару минут видео... Не понял проблемы.
Ну свалили они все классы в один. Чтобы не светить все кишки, добавили интерфейс и навернули фабрику (http://ru.wikipedia.org/wiki/%D0%A4%...BD%D0%B8%D1%8F).

Т.е. вопросы проектирования архитектуры - это одно, а организация файлов в проекте - это другое. Если интересуют паттерны, можно почитать GoF, например...
Это понятно, что проектирование архитектуры и организация файлов разные вещи. Просто интересуют именно технические нюансы воплощения этой архитектуры в жизнь. Для меня оказывается проблемой то, что созданная система работает и выполняет свои функции как положено, но глядя на все исходники проекта меня одолевает мысль что все криво и не как надо.
С паттернами хотел ознакомиться в ближайшее время. GoF имеется ввиду Гамма и др.?
0x10
2459 / 1631 / 238
Регистрация: 24.11.2012
Сообщений: 4,011
18.08.2013, 20:26     Структура проекта #6
Цитата Сообщение от gulejop Посмотреть сообщение
глядя на все исходники проекта меня одолевает мысль что все криво и не как надо
Абстрактные советы тут дать сложно, нужны конкретные примеры.

Цитата Сообщение от gulejop Посмотреть сообщение
С паттернами хотел ознакомиться в ближайшее время. GoF имеется ввиду Гамма и др.?
Да.
kvadro
11 / 9 / 1
Регистрация: 12.03.2012
Сообщений: 127
19.08.2013, 14:40     Структура проекта #7
Так и размещать. Исключение - шаблоны.
Т. е. реализацию шаблонов тоже хранить в хедере?
Croessmah
Модератор
Эксперт CЭксперт С++
13045 / 7308 / 814
Регистрация: 27.09.2012
Сообщений: 18,041
Записей в блоге: 3
Завершенные тесты: 1
19.08.2013, 14:49     Структура проекта #8
Цитата Сообщение от kvadro Посмотреть сообщение
Т. е. реализацию шаблонов тоже хранить в хедере?
ага. Либо инклудить в заголовок
fasked
Эксперт С++
4933 / 2513 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
19.08.2013, 15:04     Структура проекта #9
gulejop, могу посоветовать почитать Large-Scale C++ Software Design. Книга, правда, старенькая, но принять многие моменты к сведению все равно можно. Также познавательно будет посмотреть на организацию крупных open-source проектов.
kvadro
11 / 9 / 1
Регистрация: 12.03.2012
Сообщений: 127
19.08.2013, 15:07     Структура проекта #10
ага. Либо инклудить в заголовок
А как использовать тогда extern template?

Я просто думал нужно писать так:

C++
1
2
3
4
5
6
7
8
9
// test.h
template< typename T >
class Foo
{
    T f();
};
 
// explicit instantiation
extern template class Foo< int >;
C++
1
2
3
4
5
6
7
8
// test.cpp
template< typename T >
void Foo< T >::f()
{
    // ...
}
 
template class Foo< int >;
C++
1
2
3
4
5
6
7
8
// main
#include "test.h"
 
int main()
{
    Foo< int > foo;
    return 0;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.08.2013, 15:13     Структура проекта
Еще ссылки по теме:

Си, структура - C++
Привет всем =) Помогите пожалуйста решить задачку на структуру... Определить структуры, описывающие шар и точку в трехмерном...

Структура - C++
Дан массив из 6 элементов типа структура, содержащих координаты центра окружности и радиус(x,y,r)Надо определить и вывести на печать...

Структура - C++
Помогите пожалуйста, никак не могу реализовать эту программу((( Запись о товаре на складе представляет собой структуру с полями: номер...

структура - C++
дана структура отдела кадров и сотрудников в отделе, нужно к этой структуре дописать сортировку по стажу работы и вывод сотрудников...

Структура - C++
С клавиатуры вводятся слова, некоторые из них повторяются. Записать их в массив структур, в котором слова не повторяются. Каждая структура...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
fasked
Эксперт С++
4933 / 2513 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
19.08.2013, 15:13     Структура проекта #11
Цитата Сообщение от kvadro Посмотреть сообщение
А как использовать тогда extern template?
extern template не реализован в подавляющем большинстве компиляторов. В стандарте С++11 от этой фичи вообще отказались. Поэтому правильным ответом на Ваш вопрос будет "лучше этим не пользоваться вообще".
Yandex
Объявления
19.08.2013, 15:13     Структура проекта
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru