Могу ли я инициализировать поток STD :: в конструкторе подкласса во время объявления в базовом классе? Как?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Могу ли я инициализировать поток STD :: в конструкторе подкласса во время объявления в базовом классе? Как?

Сообщение Anonymous »

У меня есть база с использованием std :: thread _threadcall в его деструкторе, но мне нужно инициализировать его из подкласса (представьте себе несколько подклассов, все по -разному инициализации _threadcall ).

Код: Выделить всё

class QueryBase
{
std::condition_variable _cv;
bool _run{ true };
std::thread _threadCall;
virtual ~QueryBase();
void virtual CallRunner()=0;
}

QueryBase::~QueryBase()
{
_run = false;
_cv.notify_one();
_threadCall.join();
}
< /code>
subclass: < /p>
class __declspec(dllexport) AsyncQuery: public QueryBase
{
protected:
MessageChangedCallback _log{};
public:
AsyncQuery(MessageChangedCallback fn);
void Add(const std::string& msg);
void CallRunner() override;
}

AsyncQuery::AsyncQuery(MessageChangedCallback fn)
: QueryBase(), _log(fn),
_threadCall([&] { CallRunner(); }) //E0292 _threadCall is a non-static member
// or base class of class AsyncQuery
{
}
< /code>
Могу ли я инициализировать его из конструктора подкласса или каким -то образом? Если нет, я обязан писать один и тот же DTOR в каждом отдельном подлассе? Подклассы: < /p>
class QueryBase
{
std::function f;
void virtual CallRunner()=0;

QueryBase::QueryBase() : _threadCall(f)
{
}

AsyncQuery::AsyncQuery(MessageChangedCallback fn)
: _log(fn)
{
f = [&] {CallRunner();};
}
, где callrunner () определяется (переопределяет чистый виртуальный) только в подклассах. Какие -нибудь плюсы/минусы об этом?

Подробнее здесь: https://stackoverflow.com/questions/794 ... eclared-in
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»