ユニバーサル ポリモーフィズムは、C++ で期待されているものとは異なることがわかりました。C++ はアドホック ポリモーフィズムです。
ユニバーサルは、タイプの数に関係なく、同じ署名のバージョンしか存在できないと言います。
他の回答は、パラメトリックとインクルージョンが普遍的なカテゴリであるという詳細をざっと見抜いていると思います。元のテキストを考えると、彼らまたは私がどのように混乱しているかがわかります。;)
以下を考えると:
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 で同様の動作を使用してきましたが、他の多くの人にも同様の動作があると確信しています。