Я понял, что универсальный полиморфизм отличается от того, что мы ожидаем от C ++.C ++ является специальным полиморфизмом.
Universal говорит, что может быть только версия одной и той же сигнатуры, независимо от количества типов.
Я думаю, что другие ответы скользят по деталям, что параметрический иВключение являются категориями универсального.Учитывая оригинальный текст, я вижу, как они или я были сбиты с толку.;)
Учитывая следующее:
struct Foo {
virtual void foo();
};
struct Bar {
virtual void bar();
// virtual void foo(); // this would error
};
Параметрический параметр будет выглядеть так:
struct FooBar : public Foo, public Bar {};
Подписи, содержащиеся в FooBar
, статически определяются во время компиляции.
C ++ напрямую не поддерживает полиморфизм включения.Они были бы ближе к внедрению, которое вы можете найти в языках сценариев, где функции имеют первый порядок.
Пожалуйста, не воспринимайте этот код буквально, это просто для демонстрации.
struct FooBar {};
int main() {
FooBar foob;
foob.foo = Foo::foo;
foob.bar = Bar::bar;
return 0;
}
FooBar
не знает своего интерфейса во время компиляции, он динамически создается.Я использовал подобное поведение в javascript и Lua, и я уверен, что многие другие имеют подобное.