Код: Выделить всё
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();};
}
Подробнее здесь: https://stackoverflow.com/questions/794 ... eclared-in