Не могу разобраться, помогите понять как сделать

привет всем.есть такие классы:
class Base{public:    //...    virtual ~Base(){}};class Derived : public Base{   bool _b;public:  //...  Derived(bool b):_b(b){}  Derived operator !() const{      //...      return Derived(!_b);  }};typedef boost::shared_ptr<Base> objPtr;class Data{  objPtr o;public:  //...  objPtr getObject() const{    return o;  }};
теперь есть ф-ция:
objPtr foo(Data &data){   objPtr obj = data->getObject();   //далее нужно каким-то образом возвратить из ф-ции objPtr, который бы содержал указатель на объект с исполненной operator !() на нём. т.е. инвертированным объектом. }
как это разрулить?
4 ответа

return obj;


return obj;
а как же:
 //далее нужно каким-то образом возвратить из ф-ции objPtr, который бы содержал указатель на объект с исполненной operator !() на нём. т.е. инвертированным объектом. 
??мне сначала нужно разыменовать objPtr, применить к нему operator !(), сохранить, и уже ПОТОМ возвратить  cмарт-пойнтер, содержащий этот объект. как это сделать?


objPtr foo(Data &data){   objPtr obj = data->getObject();   return (*obj = !*obj);   //далее нужно каким-то образом возвратить из ф-ции objPtr, который бы содержал указатель на объект с исполненной operator !() на нём. т.е. инвертированным объектом. }


Оператор '!' не удасться применить к Base объекту, так как он там не определен.