我理解通用多态与我们在 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 中使用过类似的行为,我相信很多其他人也有类似的行为。