[c++] вложенные классы, как правильно определить?

PooH

 
 
/*-----------Outer.h--------*/
class Outer {
private:
class Inner {
void do;
Inner;
}
}

/*-----------Outer.cpp------*/
void Outer::Inner::do {...};

так правильно?
есть сомнения, что нормально сработает с private nested class
реализовывать Inner в виде inline не хочется, потому что есть уюеждение, что в хэдэр-файлах не должно быть логики

Serab

проверить не судьба если есть сомнения? :)
Но вообще оно ок.

elenangel

еще можно так:
/*-----------Outer.h--------*/
class Outer
{
private:
    class Inner;
    Inner *pImpl;
}
/*-----------Outer.cpp------*/
class Outer::Inner
{
public:
   void do;
   Inner;
}
void Outer::Inner::do {...};
если я правильно понял ты хочешь шаблон pointer to implementation, он же файрвол компилятора

elenangel

http://www.insidecpp.ru/patterns/pimpl_idiom/ вот тут неплохо написано

PooH

спс, то, что надо
да, хочу скрыть "под капот", но при этом приходится использовать треды и пару вспомогательных класса
UPD: приват класс-треды не получилось :) - meta object....

elenangel

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

elenangel

так ты пытаешься шаблон сделать со скрытой реализацией или класс со скрытой реализацией внутри которого используются шаблонные треды?
если первое, то не получится, если второе - то можно.

PooH

еще вот такой вопрос:
кошерно ли делать так:
 
 
class MyClass : QObject {
Q_OBJECT
MyClass {
MyThread* thread = new MyThread;
this->moveToThread(thread); // !
connect(thread, SIGNAL(signal this, SLOT(_slot;
thread->start;
}

public slots:
void slot;
}

class MyThread : QThread {
run {
//do_some_hard_work
emit signal;
}
signals:
void signal;
}

PooH

т.е. в конструкторе привязывать объект к только что созданному треду?

elenangel

скажу честно - не знаю, с Qt-тредами работал совсем чуть-чуть

Dasar

именно в данном коде, мне не нравится, что не понятно: кто кем владеет? MyThread владеет MyClass-ом? или MyClass владеет MyThread?
ps
один из отчетливых признаков владения: кого надо прибить первым, чтобы второй прибился автоматически.

PooH

именно в данном коде, мне не нравится, что не понятно: кто кем владеет? MyThread владеет MyClass-ом? или MyClass владеет MyThread?
надо попробовать и так, и так - предвижу веселье

PooH

именно в данном коде, мне не нравится, что не понятно: кто кем владеет? MyThread владеет MyClass-ом? или MyClass владеет MyThread?
как кошерно-то делать?
мне нужно создать тред, который выполняет кучу работы и сигналит о ее прогрессе

Dimon89

мне нужно создать тред, который выполняет кучу работы и сигналит о ее прогрессе
Ну и пусть себе делает, зачем moveToThread вообще использовать в данном случае?

apl13

Почитай http://qt-project.org/wiki/Threads_Events_QObjects, что ли...

PooH

Почитай http://qt-project.org/wiki/Threads_Events_QObjects, что ли...
уже прочитал
сейчас реализовал все в виде worker объектов, которые закидываю в тред
http://labs.qt.nokia.com/2010/06/17/youre-doing-it-wrong/#co...
вот более-менее нормальный способ, как я понял
Оставить комментарий
Имя или ник:
Комментарий: