我有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构造函数 我希望它成为一个独立的课程。如何以最好的方式做到这一点?
答案 0 :(得分:0)
这可能会帮到你。 C ++ 11为继承构造函数引入了这种新语法:
class MyClass : public std::valarray<bool> {
public:
using std::valarray<bool>::valarray;
// ...
};
您可以通过继承std::valarray<bool>
而不编写构造函数来使用它来构建第二种方法。