Mám nasledovný program:
#include <iostream>
#include <memory>
using namespace std;
class B{
protected:
B(){cout << "B\n";}
public:
typedef unique_ptr<B> uptr_t;
template <typename... Args>
inline static uptr_t New(Args... args){return uptr_t(new B(args...)); }
virtual B* vfnc1(){
cout << "B::vfnc1()\n";
return new B();
}
virtual uptr_t vfnc2(){
cout << "B::vfnc2()\n";
return uptr_t(new B());
}
virtual ~B(){cout << "~B\n";}
};
class D : public B{
private:
D(){cout << "D\n";}
public:
typedef unique_ptr<D> uptr_t;
template <typename... Args>
inline static uptr_t New(Args... args){return uptr_t(new D(args...)); }
virtual D* vfnc1(){
cout << "D::vfnc1()\n";
return new D();
}
virtual uptr_t vfnc2(){ /* Funkcia nemôže prekryt funkciu B::vfnc2()*/
cout << "D::vfnc()\n";
return uptr_t(new D());
}
virtual ~D(){cout << "~D\n";}
};
int main(){
B* b1;
B::uptr_t b2 = D::New();
b1 = b2->vfnc1();
b2 = b2->vfnc2();
}
Keď vracajú metódy vfnc1() obyčajný pointer tak sa môžu prekryť, samozrejme keď vraciam funkciami vfnc2() unique_ptr tak sa metódy nemôžu prekryť. Je nejaký spôsob ako to obísť alebo jednoducho vyriešiť?