【发布时间】:2019-07-25 04:09:40
【问题描述】:
我有一个IBase 课程和一个Child 课程。我需要在不同的子类中调用不同的proc 函数。我不确定下面哪种形式实际上是正确的,也许两者都不是 XD。
- 表格 1:我不希望我的
IBase有任何非虚拟功能。 - 表格 2:
&IBase::proc有一个奇怪的表达方式可能会引起一些误解。
class IBase
{
public:
virtual void proc() = 0;
auto createBind()
{
return bind(&IBase::proc, this);
}
};
class Child :public IBase
{
public:
void proc() override
{
cout << "Hello World" << endl;
}
};
int main()
{
IBase* pointer = new Child;
//form 1
thread th(pointer->createBind());
th.join();
//form 2
thread th2(&IBase::proc, pointer);
th2.join();
cout << "Finish" << endl;
return 0;
}
我想知道你们如何在实际项目中解决这种情况。
【问题讨论】:
-
(这是特定于我处理的代码而不是一般规则)通常接口说“IParent”只包含虚拟/纯虚拟函数的声明说(“virtualFunc”)。然后从接口类派生类,比如 DeriveClass1 和 DeriveClass2,它们有自己的 'virtualFunc' 实现。现在,让基类指针指向派生类对象之一,并使用该指针调用函数。因此,在运行时,会根据对象的类型调用相应的派生类函数。
标签: c++ c++11 stdthread stdbind