我理解通用多态性与我们在C++中所期望的不同。 C++是ad-hoc多态性。
通用表示只能使用相同签名的版本,而不考虑类型的数量。
我认为其他答案略过细节,参数和包含是通用类别。鉴于原文,我可以看到他们或我是如何困惑的。 )
鉴于以下:
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中使用了类似的行为,我相信很多其他人都有类似的行为。
你可能会感兴趣的阅读这个答案:http://stackoverflow.com/a/36949734/67634 – Zuu