1
我有bool valarrays的valarray,我需要用我自定義的元素比較函數對它們進行排序。 也就是說如果每個元件的長度是4,然後我希望他們進行排序如下:如何修改STL中的std :: valarray類?
0000, 0001, 0010, 0100, 1000, 0011, 0101, 1001, 0110, 1010, ...
這裏是我的功能:
inline bool operator<(const std::valarray<bool>& lhs, const std::valarray<bool>& rhs) {
if (lhs.soze() != rhs.size()) return 0;
if (lhs.sum() < rhs.sum()) return 1;
if (lhs.sum() > rhs.sum()) return 0;
for (int i = lhs.size() - 1; i >= 0; --i) {
if (lhs[i] < rhs[i]) return 0;
if (lhs[i] > rhs[i]) return 0;
}
return 0;
}
我想創建具有相同功能的新類,但修改的比較運算符
如果我使用的裝飾,我將不得不指定裝飾類名wheninitializing我的對象:
MyValarray* mv = new MyValarray(new std::valarray<bool>(4));
如果我使用繼承我會定義所有的valarray構造。
我希望它是一個獨立的課程。如何以最好的方式做到這一點?
繼承構造函數是否是一種好習慣? –
@ user162065:如果你不想創建一個全新的類,重複所有的構造函數,並且可能會忘記一些東西,那麼是的,這是一個很好的練習。它由於某種原因進入了標準,不是嗎? )。 – 3442
但由於某種原因,它並沒有達到標準。我應該何時使用裝飾器而不是繼承? –