bind Abstract class and its derived classes; push and pull boost::shared_ptr