Ho compreso che il polimorfismo universale è diverso da quello che ci aspettiamo in C++. Il C++ è un polimorfismo ad-hoc.
Universal dice che può esserci solo la versione della stessa firma, indipendentemente dal numero di tipi.
Penso che le altre risposte sfiorino il dettaglio che parametrico e inclusione sono categorie di universale. Dato il testo originale, posso vedere come loro o io siamo stati confusi. ;)
Dato sottostante:
struct Foo {
virtual void foo();
};
struct Bar {
virtual void bar();
// virtual void foo(); // this would error
};
Parametric sarebbe come:
struct FooBar : public Foo, public Bar {};
Le firme contenute in FooBar
è determinato staticamente in fase di compilazione.
C++ non supporta direttamente il polimorfismo di inclusione. Sarebbero più vicini all'iniezione che potresti trovare nei linguaggi di scripting in cui le funzioni sono di primo ordine.
Si prega di non prendere questo codice alla lettera, è solo per la dimostrazione.
struct FooBar {};
int main() {
FooBar foob;
foob.foo = Foo::foo;
foob.bar = Bar::bar;
return 0;
}
FooBar
non conosce la sua interfaccia in fase di compilazione, è dinamico composto. Ho usato un comportamento simile in javascript e Lua, e sono sicuro che molti altri hanno simili.
fonte
2011-09-15 14:49:37
Si potrebbe essere interessati a leggere questa risposta: http://stackoverflow.com/a/36949734/67634 – Zuu