Ecco un codice che ho ricevuto da qui :
class Deletor {
public: virtual ~Deletor() {}
};
template<typename T> class Base : public Deletor {
public:
int Run() { return static_cast<T*>(this)->DoIt(); }
};
class Derived1 : public Base<Derived1> {
...
public:
int DoIt() { /* the actual implementation for Derived1 */ }
};
class Derived2 : public Base<Derived2> {
...
public:
int DoIt() { /* the actual implementation for Derived2 */ }
};
int main() {
Derived1 Obj1;
Derived2 Obj2;
Obj1.Run(); /* runs the actual DoIt() implementation */
Obj2.Run(); /* runs the actual DoIt() implementation */
};
Sembro e questo codice e penso perché ho dovuto usare l'ereditarietà o il CRTP per raggiungere questo obiettivo? Potrei semplicemente scrivere due classi non correlate che implementano entrambi il metodo Run()
. Cosa mi manca qui?