Не думаю, что ты можешь. A::foo
возвращает A
, вот как оно определено, вот что он делает. Даже если B
не содержит никаких дополнительных данных, я не думаю, что C ++ может это знать.
Несколько альтернатив, которые вы могли бы попробовать вместо:
Иметь B
подрядчика, который создает из параметра А. Хотя я думаю, что это действительно актерский состав.
class B, public A
{
/*no-data*/
B( const A& param );
B doMagic(...);
};
/*usage*/
B bone;
B btwo = bone.foo(...);
Или другая стратегия, сделайте doMagic
статическим методом, который работает с параметром A
. Я предполагаю, что весь смысл в том, что вы хотите запустить метод doMagic для результата A::foo
class B, public A
{
/*no-data*/
static B doMagic(A& param, ...);
};
/*usage*/
B bone;
A atwo = bone.foo(...);
B::doMagic( atwo, ... );
Не знаю, сработают ли они для вас, но, надеюсь, они помогут.