Hi, All.
Помогите плиз с реализацией.
class A { };
class B : public A { };
void main_main(A *) {} ;
void call_main() { main_main(get()); };
class C;
C get ()
{
/*
Здесь нужно вернуть объект класса B. (legacy)
Проблема в том, что глобально создавать переменные нельзя.
new/delete не подходит.
Я в качестве класса C выбрал boost::shared_ptr<B>, но shared_ptr не умеет неявно кастоваться к базовому классу,
что нужно по legacy.
Как копать?
*/
}
Добавлена разметка — Кодт
Здравствуйте, amberovsky, Вы писали:
A>Hi, All.
A>Помогите плиз с реализацией.
A>A>class A { };
A>class B : public A { };
A>void main_main(A *) {} ;
A>void call_main() { main_main(get()); };
A>class C;
A>C get ()
A>{
A>/*
A>Здесь нужно вернуть объект класса B. (legacy)
A>Проблема в том, что глобально создавать переменные нельзя.
A>new/delete не подходит.
A>Я в качестве класса C выбрал boost::shared_ptr<B>, но shared_ptr не умеет неявно кастоваться к базовому классу,
A>что нужно по legacy.
A>Как копать?
A>*/
A>}
A>
А почему get() должен обязательно возвращать некий объект, а не простой указатель?
A>Нет.. нужно вернуть объект, который умеет неявно кастоваться в класс А и В.
отвечать за невозможность выбора перегруженной функции (x(A*)|x(B*)) будет автор требования
A>Который не уничтожится сразу после выхода из функции. Без глобальных переменных.
Может так?
class A { };
class B : public A { };
void main_main(A *) {} ;
void call_main() { main_main(get()); };
class C
{
A a;
B b;
public:
operator A* () { return &a; }
operator B* () { return &b; }
};
C get () // лучше было бы вернуть по ссылке
{
static C c;
return c;
}
ЗЫ Мне кажется что так делать не стоит, нужно вернуться в проектировании на шаг назад и понять что вызывало такие требования.