![](/img/trans.png)
[英]Making a vector of base class pointers and pass Derived class objects to it (Polymorphism)
[英]Pass vector of derived class pointers to thread
我有一個帶有Derived1和Derived2派生類的基類以及一個Consumer類。
我想用兩個派生類對象創建一個基指針向量,然后傳遞給使用者類,以便它可以使用以下方法獲取派生類詳細信息
pointervec.at(0).i
我已經堅持了很長時間,無法使其正常工作。 這是我所擁有的簡化版本。 我擔心圍繞創建向量,將其傳遞到線程並訪問不同索引的語法。
#include<vector>
#include<thread>
#include<iostream>
using namespace std;
class Base
{
public:
Base() {};
void dosomething() {cout<<i<<endl;}
int i;
};
class Derived1 : public Base
{
public:
Derived1() {i = 5;}
};
class Derived2 : public Base
{
public:
Derived2() {i = 10;}
};
class Consumer
{
public:
Consumer();
void dostuff( vector<Base> &pointervec) {cout<<5<<endl;}
};
int main( int argc, char ** argv )
{
Derived1 derived1;
Derived2 derived2;
vector<Base*>pointervec;
pointervec.push_back(&derived1);
pointervec.push_back(&derived2);
std::thread t1(&Derived1::dosomething, &derived1);
std::thread t2(&Derived2::dosomething, &derived2);
std::thread t3(&Consumer::dostuff, ref(pointervec));
t1.join();
t2.join();
t3.join();
}
為了使您的示例正常工作,需要糾正一些錯誤。
Consumer::doStuff
是一個非靜態成員函數,因此您需要一個Consumer
實例來對其運行。 Consumer
需要定義的構造函數 doStuff
的簽名需要采用(指向) Base
指針(而不是Base
對象)的向量 t3
需要Consumer
所述實例作為其第一個轉發參數(以提供this
參數)。 最終工作代碼:
#include<vector>
#include<thread>
#include<iostream>
using namespace std;
class Base
{
public:
Base() {};
void dosomething() {cout<<i<<endl;}
int i;
};
class Derived1 : public Base
{
public:
Derived1() {i = 5;}
};
class Derived2 : public Base
{
public:
Derived2() {i = 10;}
};
class Consumer
{
public:
Consumer() {}
void dostuff( vector<Base*> &pointervec) {cout<<pointervec.at(0)->i<<endl;}
};
int main( int argc, char ** argv )
{
Derived1 derived1;
Derived2 derived2;
Consumer c;
vector<Base*>pointervec;
pointervec.push_back(&derived1);
pointervec.push_back(&derived2);
std::thread t1(&Derived1::dosomething, &derived1);
std::thread t2(&Derived2::dosomething, &derived2);
std::thread t3(&Consumer::dostuff, &c, ref(pointervec));
t1.join();
t2.join();
t3.join();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.