假設有以下類:
class A {
};
class B: public A {
};
和 unique_ptr 到 B 的向量:
std::vector<std::unique_ptr<B>> bElements
是否有可能將向量傳遞給接受
std::vector<std::unique_ptr<A>>&作為引數的函式
uj5u.com熱心網友回復:
不。無論 和 之間的關系如何,A與std::vector<Foo>a 沒有特殊關系。它們是兩種截然不同的完全不同的型別。當您要求函式的引數的確切型別時,它們是同一類模板的實體化這一事實無關緊要。std::vector<Bar>FooBar
但是,它們是同一模板的實體化這一事實使您能夠使用鴨子型別。使函式成為函式模板。它可以采用一個std::vector<std::unique_ptr<T>>或只是一個型別的容器C,或型別的迭代器Iter。正如您了解基類一樣B,您知道鴨子如何行走以及鴨子如何嘎嘎叫,并且可以實作函式模板,因此它可以與std::vector<std::unique_ptr<A>>或一起使用std::vector<std::unique_ptr<B>>。
(“鴨子”是繼承自的類A,“它們如何走路和如何嘎嘎”是 的介面A)
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/523297.html
標籤:C 遗产
上一篇:VScode的Liveserver擴展不會在更改時自動重新加載頁面
下一篇:將子類值的映射轉換為超類值的映射
