我知道移動建構式可以避免復制,具有高性能。
但是我可以使用它來將資料從基類復制到派生類嗎?
例如:
// base.h
class Base {
public:
int a;
char buff[24];
double bp_[10];
};
// derived.h
class Derived : public Base {
public:
int b;
char buff2[16];
};
// main.cpp
int main() {
Base b;
b.a = 1;
snprintf(b.buff, sizeof(b.buff), "helloworld");
b.bp_[0] = 100;
Derived d;
d.b = 9;
snprintf(d.buff2, sizeof(d.buff2), "mytest");
// TODO: how can i move b's data into d with high performance?
}
請看代碼,我有一個帶資料的 Base 物件,但我想創建一個 Derived 類物件,所以我需要從 Base 物件復制資料,有沒有像移動建構式這樣的好方法?
uj5u.com熱心網友回復:
沒有通用的方法可以做到這一點,因為基類和派生類中的資料布局可能不同。您需要撰寫一個特定的函式來為每個類進行復制。
一種方法是撰寫一個模板函式,它接受一個基類和一個派生類,并使用 static_cast 來復制資料:
template <typename Base, typename Derived>
void copy_data(Base& b, Derived& d)
{
d = static_cast<Derived>(b);
}
如果基類和派生類中的資料布局相同,這將起作用。如果不是,則需要撰寫一個特定的函式來進行復制。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/537172.html
標籤:C C 11
下一篇:如果有很多執行緒在等待通知,std::condition_variable::notify_one()函式通知哪一個?
