Vorrei creare una classe base (astratta) (chiamiamola type::base
) con alcune funzionalità comuni e un'interfaccia fluente, il problema che sto affrontando è il tipo di ritorno di tutti quei metodiInterfacce fluide ed ereditarietà in C++
class base {
public:
base();
virtual ~base();
base& with_foo();
base& with_bar();
protected:
// whatever...
};
Ora ho potuto fare sottotipi, ad esempio:
class my_type : public base {
public:
myType();
// more methods...
};
Il problema arriva quando si utilizzano questi sottotipi come questo:
my_type build_my_type()
{
return my_type().with_foo().with_bar();
}
Questo non verrà compilato perché stiamo restituendo base anziché my_type.
so che ho potuto solo:
my_type build_my_type()
{
my_type ret;
ret.with_foo().with_bar();
return ret;
}
Ma stavo pensando come posso implementarlo, ed io non ho trovato tutte le idee valide, qualche suggerimento?
Ho rimosso lo spazio dei nomi perché non ha nulla (per quanto posso vedere) da fare con la domanda –