Как реализовать приведение к частному базовому классу в C++? Я не хочу использовать хаки, такие как добавление друга и т. д. Определение оператора публичного кастинга не работает.
ИЗМЕНИТЬ:
Например, у меня есть:
class A {
//base class
}
class AX : private A {
//a child
}
class AY : private A {
//another specialized child
}
class B {
//base class
void do (A a) {//do
}
}
class BX : private B {
//a child
void do (AX a) {
B::do( static_cast <A> (a) );
}
}
class BY : private B {
//another specialized child
void do (AY a) {
B::do( static_cast <A> (a) );
}
}
ИЗМЕНИТЬ2
Почему я это делаю?
Предположим, мне нужно определить какое-то свойство, которое довольно тяжеловесно и может иметь несколько схожих типов (например, VelocityX, VelocityY и т. д.). Затем я хочу иметь классы, которые могут иметь любой набор этих свойств. Если я хочу обработать эти свойства, очевидно, что я скорее приведу их к их базовому типу, чем добавлю реализацию для каждого варианта. Я не использую публичное наследование, потому что лучше явно приводить типы там, где это необходимо, чем неявно отображать частный интерфейс. Не проблема, но хотелось бы решения :)
friend
взломом. - person Martin Ba   schedule 18.09.2010private
наследование значит Не рассматривайте это как основу. Это имеет очень сильный запах кода. Я бы предложил полностью переосмыслить ваш подход. - person greyfade   schedule 18.09.2010