Re[3]: Многопроектный солюшен - как собрать в единый exe
От: ZegSoft Россия  
Дата: 19.02.11 20:23
Оценка:
Здравствуйте, suvolod, Вы писали:

S>Вообще, ответ "в тему". На самом деле мне надо как-то логически/визуально разделить ту кучу классов, которая есть сейчас на вкладке ClassView, на фукнциональные группы. Разбиение на отдельные проекты мне показалось наиболее очевидным и удобным решением.. тем более что: оттестировал я функционал окна настроек, откомпилировал его lib-ку — теперь можно про нее "забыть", а работать/подвергать перекомпиляции только проект самой программы. Разбиение на пространство имен неудобно тем, что везде при работе с окном настроек придется добавлять имя этого пространства + ::. не люблю такое... А про вложенные классы не совсем понял.. То есть ты предлагаешь в один класс добавить всю кучу классов, например, проекта окна настроек? Затем создать в программе объект этого класса и работать с ним? Но ведь во вкладке ClassView все это множество классов все равно будет отображаться линейно, в общей куче... Да и в программе это будет выглядеть также как с пространством имен, только вместо myNameSpace::MyClassОbject.MyFunc(...) я буду писать нечто вроде myGlobalClassObject.MyClassObject.MyFunc(...)


Ну например, у тебя есть CPropertySheet, который имеет кучу вкладок. Эти вкладки, кроме как в объекте CPropertySheet тебе создавать не надо. Соответственно их можно запихнуть в CPropertySheet и они будут вложенными в него. И при создании в объекте CPropertySheet этих вкладок не нужно будет указывать :: так как они и так в нем объявлены. Точно так же можно сделать и с другими классами, которые используются только в CPropertySheet (классы элементов управления и так далее).
Отображаться они будут не линейно, а именно внутри класса (см. рисунок).


Это очень удобно, поскольку позволяет не засорять глобальное пространство имен, ну и кроме того, классы оказываются сгруппированныйми и по смыслу и физически. Единственный недостаток, после такого объединения ClassWizzard вряд сможет корректно обрабатывать вложенные классы, так что добавлять и удалять функции придется вручную. Но для меня например, это не является большой проблемой.
Кроме того, можно же использовать папки для группировки классов. В том числе и вложенные папки. Это очень удобно!!
Кстати, добавлять везде :: вовсе не нужно!!! Для этого есть using и using namespace.

Допустим, есть такой вот класс


class A
{
public:
  A();
  ~A();

  class B
  {
    public:
      B();
      ~B();
  }
};





в *.cpp файле пишешь


using A::B;



После этого можешь спокойно реализовывать функции:


A::A()
{

}

A::~A()
{

}

B::B()
{

}

B::~B()
{

}



Кроме того, реализации классов А и B могу даже находиться в разных файлах.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.