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
但由于某种原因,它并没有达到标准。我应该何时使用装饰器而不是继承? –