我有两个可互换的类。 A可以转换为B,B可以转换为A.我想要的是指定A转换为B的首选方式,但仍然可以执行以下操作:
B b = A();
B b; b = A();
我想避免的是这个问题: B b = q? A():B();
错误:条件表达式不明确; 'A'可以转换为'B',反之亦然
我尝试了一系列显式设置,但我无法弄清楚这是否可行。我更喜欢不必在这些上调用static_cast。
struct B;
struct A {
int a;
A () {
}
A (B b);
explicit operator B ();
};
struct B {
int b;
B () {
}
B (A a);
explicit operator A ();
};
A::A (B b) {
}
A::operator B () {
B b;
return b;
}
B::B (A a) {
}
B::operator A () {
A a;
return a;
}
int main () {
int q;
A a;
B b;
A ab = q ? a : b;
B b2 = a;
}
答案 0 :(得分:0)
解决方案是执行此操作A ab = q ? (A)a : (A)b;
,这样就可以显式地转换每个代码,而代码会尝试隐式执行此操作。