Если у меня есть 2 класса A
а также B
и хотите осуществить преобразование из A
в B
Я вижу 2 варианта.
class A {
// Some attributes, methods
operator B() const {
// Conversion from A to B
}
}
class B {
// Some attributes, methods
}
class A {
// Some attributes, methods
}
class B {
// Some attributes, methods
B& operator =(const A& src) {
// Conversion from A to B
}
}
Оба эти метода позволяют запустить следующий код:
A instA;
B instB;
instB = instA; // Ok
Теперь давайте представим, что я реализую обе функции (приведение к B
в классе A
а также operator =
от A
в классе B
:
class A {
// Some attributes, methods
operator B() const {
// Conversion from A to B - Code 1
}
}
class B {
// Some attributes, methods
B& operator =(const A& src) {
// Conversion from A to B - Code 2
}
}
при условии, Код 1 а также Код 2 имеют одинаковый эффект (или даже разные эффекты, почему бы и нет).
Мои вопросы:
operator =
класса B
в B()
оператор приведения класса A
?Если предусмотрены конкурирующие методы приведения / присвоения, какой из них будет выбран первым при выполнении неявного приведения?
Учитывая выбор, operator=()
будет дано первое предпочтение, так как он не требует преобразования аргумента RHS.
Есть ли интерес в реализации обоих конкурирующих методов приведения / назначения?
Нет, лучше избегать путаницы.
Возможно, это даже было бы хорошей идеей, чтобы позвонить
operator =
классаB
вB()
оператор приведения классаA
?
Если вы должны поддерживать оба, тогда, да, было бы неплохо сделать это.
Других решений пока нет …