我正在使用定義一些數據類型類的庫,通常以std :: vector <>的方式實現爲緊包裝。類型層次結構深數層,大多隻添加精細的構造函數。如何解決庫中的'const'定義
我的問題:基類定義它的std ::向量爲私有(這很好),但只添加一個訪問器方法爲const。派生類甚至無法訪問它。該庫看起來是這樣的(短爲清楚起見):
template <class T> class BaseList
{
public:
BaseList (const T data0) : data_ (1) {
data_[0] = data0; }
const T & operator[] (const size_t nr) const {
// does out off bounds check here
return data_[nr]; }
private:
std::vector<T> data_;
}
class FancyClass : public BaseList<SomeEnumType>
{
public:
FancyClass (const SomeOtherEnumType data0)
: BaseList<SomeEnumType> (static_cast<SomeEnumType> (data))
{}
}
現在我看到它時,常量的定義完全是僞造的。沒有內部方法依賴於矢量真的是不變的,我也不是在我的外部代碼中。
我喜歡做的事情很簡單:
strukt MyType {
FancyClass myData;
bool otherData;
}
int main() {
MyType storage = {FancyClass(0), false};
storage.myData[0] = 5;
}
這當然不,因爲常量性的工作。 (「只讀位置的分配」)
完全在我身邊的責任:是否有一些const_cast魔術我可以做,使這個結構可寫? 我知道唯一的另一種可能性就是在我的代碼中完全複製類型層次結構,但是這仍然會讓我有很多強制轉換或toFancyClass()函數在我接口庫代碼時調用。
任何想法?謝謝!
(請不要在庫的代碼質量發表評論。如果我可以改變這種狀況,我就不會問這個問題...)
那麼數據是由圖書館創建者有意將其設爲只讀。你爲什麼要改變它? –
我們只是說我對「故意」部分不太確定。 –