隐式转换坚持使用私有函数
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 使用显式委托
我有一个 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