Вы можете инициализировать поток для запуска функции, используя список инициализатора члена. Например, рассмотрим этот конструктор для Page
:
class Page {
public:
Page(); // For example
private:
std::thread toRun;
};
Page::Page() : toRun(/* function to run */) {
/* ... */
}
Обратите внимание, как мы используем список инициализации внутри конструктора Page
для инициализации toRun
функции, которую следует запустить. Таким образом, toRun
инициализируется так, как если бы вы объявили его как локальную переменную
std::string toRun(/* function to run */);
Тем не менее, есть две основные проблемы, которые, я думаю, вы должны решить в своем коде. Во-первых, вы должны не наследовать от std::vector
или любого из стандартных классов коллекций. Эти классы не имеют своих деструкторов, помеченных virtual
, что означает, что вы можете легко вызвать неопределенное поведение, если попытаетесь трактовать свой Page
как std::vector
. Вместо этого рассмотрите возможность заставить Page
держать std::vector
как прямой подобъект. Кроме того, вы не должны выставлять std::thread
члена класса. Члены данных должны, как правило, быть private
, чтобы увеличить инкапсуляцию, упростить изменение класса в будущем и не дать людям нарушать все инварианты вашего класса.
Надеюсь, это поможет!