如何从STL修改std :: valarray类?

时间:2015-11-06 00:25:30

标签: c++ oop stl

我有bool valarrays的valarray,我需要使用我自定义的元素比较函数对它们进行排序。 即如果每个元素的长度为4,那么我希望它们按如下方式排序:

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;
}

我想创建一个具有相同功能但修改过的比较运算符的新类 如果我使用装饰器,我必须在初始化我的对象时指定装饰的类名:

MyValarray* mv = new MyValarray(new std::valarray<bool>(4));

如果我使用继承,我必须定义所有valarray构造函数 我希望它成为一个独立的课程。如何以最好的方式做到这一点?

1 个答案:

答案 0 :(得分:0)

这可能会帮到你。 C ++ 11为继承构造函数引入了这种新语法:

class MyClass : public std::valarray<bool> {
    public:
        using std::valarray<bool>::valarray;

        // ...
};

您可以通过继承std::valarray<bool>而不编写构造函数来使用它来构建第二种方法。