9

アドレスhttps://cs.senecac.on.ca/~chris.szalwinski/archives/btp200.082/content/adhoc.htmlでいくつかの C++ テキストを読んでいます。

セクションUNIVERSAL POLYMORPHISMで、著者はParametricおよびInclusionポリモーフィズムについて言及しました。特に、Parametricポリモーフィズムが実行時に実装されているのに、コンパイル時に実装されるのはなぜInclusionですか?

誰かが私に明確な説明や例を教えてもらえますか?

4

3 に答える 3

9

C++ の「パラメトリック ポリモーフィズム」はテンプレートを意味します。

C++ での「インクルージョン ポリモーフィック」とは、標準で言及されているように、仮想メソッド、サブクラスなどのポリモーフィックを意味すると思います

名前はぎこちなく、学術界の匂いがすると思います。

于 2011-09-15T14:15:51.100 に答える
3

method/function overloading「パラメトリック」とは、そのパラメーターのデータ型を調べることで、コンパイル時に使用するメソッドを決定できると思います。

また、「包含」とはmethod/function overriding、親サブクラスの関係で、親クラスと子クラスの両方が同じ関数を持つ場合、実行時に (オブジェクトの種類に応じて) どのメソッドが呼び出されるかが決定されることを意味します。

于 2011-09-15T14:22:31.340 に答える
1

ユニバーサル ポリモーフィズムは、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 で同様の動作を使用してきましたが、他の多くの人にも同様の動作があると確信しています。

于 2011-09-15T14:49:37.833 に答える