隐式转换坚持使用私有函数

Implicit conversion insists on using private function

我有一个 class,它有一个我想隐藏的到 int& 的转换运算符。我创建了一个派生的 class,它只提供到 int 的转换,并将到 int& 的转换设为私有。但是我仍然无法使用int转换,编译器告诉我转换不明确,或者坚持使用int&转换并告诉我它是不可访问的。我该怎么做?

struct Base {
    int value;
    operator int&() { return value; }
};

struct Derived : Base {
    operator int() { return operator int&(); }

   private:
    using Base::operator int&;
};

int main() {
    int p = Derived();
}

P.S。编译器使用 gcc 9.3.0,实际情况是 XmlRpc::XmlRpcValue class 从 ROS 的包装,以处理从 double XmlRpcValue 类型到 int 或 int XmlRpcValue 类型到 double 的可能转换。

我找不到通过继承的方法。但是如果 containment 是一个选项(Derived 有一个 Base 而不是 是一个 ), 就简单多了:

struct Base {
    int value;
    operator int&() { return value; }
};

struct Derived{
    Base b;
    operator int() { return b.operator int&(); }

};

int main() {
    int p = Derived();
}

主要缺点是您必须对要在 Derived

中提供的 methods/members 使用显式委托