我有一個包含一些數據結構的基類,和含有完全相同數據,但賦有一些額外的功能,比如(爲明確起見)一些派生類:C++類具有相同的數據結構
struct Derived : public std::vector<double>
{
// Constructors, define or inherit
using std::vector<double>::vector;
double norm() const;
}
現在在代碼的另一部分中,我想調用基類型爲std::vector<double>
的對象obj
的函數norm()
。通常,這是沒有意義的,但在這裏:
Derived
可以從它的底座(構造用使用申報進口中的例子)來構建,Derived
和ITSS基地有着完全相同的數據成員。
我可以打電話:
Derived(obj).norm()
,但我想,以避免不必要的副本。
有沒有一種方法可以簡單安全地重新解析具有相同底層數據結構的對象?或者,也許設計模式爲着裝具有(相當大的)功能集的數據結構可以完全避免該問題?
你可以使用'static_cast',但這將是嚴重類型不安全。這味道像一個XY問題。你試圖解決什麼樣的實際問題。不,不是問題中提到的問題,而是你認爲的答案涉及問題中提到的怪異類結構。 –
你不應該從std容器派生,因爲它們缺少某些你可能需要的程序不會崩潰的特性,比如虛擬析構函數。 has_a受保護的向量成員可能會更好。爲了避免這種情況,你必須不要做某些你應該能夠自由地使用你的類設計的東西,或者通過增加運行時開銷到標準庫來癱瘓整個世界的C++代碼庫。 –