Здравствуйте, 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 могу даже находиться в разных файлах.