C++ 如何通过子成员函数创建线程
我有一个C++ 如何通过子成员函数创建线程,c++,c++11,stdthread,stdbind,C++,C++11,Stdthread,Stdbind,我有一个IBase类和一个Child类。我需要在不同的子类中调用不同的proc函数。我不确定下面哪种形式是正确的,也许XD也是 表1:确切地说,我不希望我的IBase具有任何非虚拟功能 表2:有一个奇怪的表达&IBase::proc可能会引起一些误解 class-IBase { 公众: 虚拟void proc()=0; 自动创建绑定() { 返回bind(&IBase::proc,this); } }; 班级儿童:公共IBase { 公众: void proc()重写 { 我会用表3:-):
IBase
类和一个Child
类。我需要在不同的子类中调用不同的proc
函数。我不确定下面哪种形式是正确的,也许XD也是
- 表1:确切地说,我不希望我的
具有任何非虚拟功能IBase
- 表2:有一个奇怪的表达
可能会引起一些误解&IBase::proc
class-IBase
{
公众:
虚拟void proc()=0;
自动创建绑定()
{
返回bind(&IBase::proc,this);
}
};
班级儿童:公共IBase
{
公众:
void proc()重写
{
我会用表3:-):
使用IBase
中的start
作为:
thread* start()
{
thread* t = new thread(createBind());
return t;
}
在我看来,这将隐藏实现的更多细节,并为调用者提供他期望的API(启动线程)。最惯用和健壮的方法可能是这样的
std::thread t([=]{pointer->proc();});
没有绑定,没有无关的helper成员函数,没有多余提到类名的奇怪语法。(这是我处理的代码特有的,不是一般规则)通常说来,“iPart”接口只包含虚拟/纯虚拟函数的声明,比如('virtualFunc')。然后从接口类派生类,如DeriveClass1和DeriveClass2,它们有自己的“virtualFunc”实现。现在,有一个基类指针指向其中一个派生类对象,并使用该指针调用函数。因此,在运行时根据obj的类型调用相应的派生类函数诸如此类。你到底为什么要在堆上分配std::thread
?那么谁来释放thread对象呢?我个人认为这可能会使问题变得更复杂。我没有关注这方面(因为这不是问题的一部分)-你的线程什么时候会被破坏?可以使用auto_ptr或unique_ptr或其他实例管理结构修复我的取消分配问题。
thread* start()
{
thread* t = new thread(createBind());
return t;
}
std::thread t([=]{pointer->proc();});