(Re)named std::pair 成员中断初始化

(Re)named std::pair members breaks initialization

有以下类型:

typedef pair<double, double> MinMax; ///< first - Min, second - Max

并且用它初始化工作正常:

const MinMax mInMinMax[FunctionCount] = {{-1, 1}, {-1, 1}, {0, 1}};

但是,如果为了方便我将 pair 子类化:

///< first - Min, second - Max
struct MinMax : public pair<double, double>
{
    double& Min() { return first; }
    double Min() const { return first; }
    double& Max() { return second; }
    double Max() const { return second; }
};

编译失败并出现错误:

error: could not convert ‘{-1, 1}’ from ‘<brace-enclosed initializer list>’ to ‘const MinMax’ const MinMax mInMinMax[FunctionCount] = {{-1, 1}, {-1, 1}, {0, 1}};

是否可以正确地继承 pair<double, double>

基础 class 的构造函数不会自动 "inherited"。 您的 Min/Max 函数与此问题无关:

struct MinMax : public pair<double, double>
{
   using pair<double, double>::pair;
   ...
};