問題タブ [std-variant]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - 継承ではなく std::variant を介してポリモーフィズムを行うときに冗長性を削減するためのテクニック
2D ゲーム フレームワークまたは同様のもの (GUI フレームワークなど) にエンティティがあるとします。ここでは、位置や回転などの共通のプロパティを共有するさまざまなタイプのエンティティが存在しますが、これらのプロパティの一部はエンティティごとのタイプで処理する必要があります。たとえば、単純なスプライトの回転は、リグ付きの 2D アニメーション スケルトンの回転とは異なる方法で実行されます。
明らかに、これは従来の OOP 継承階層によって処理できます...ただし、代わりに、呼び出し元から何も継承されずactor
、状態のバニラメンバー変数を持つ具体的なクラスを持つことにより、「継承よりも構成」を使用してそのようなエンティティを表すことに興味があります。エンティティ タイプ間で同じ方法で処理されますが、エンティティ タイプごとに処理する必要がある状態を含むバリアントとの has-a 関係もあります。
この設計は、次のように機能させることができます。
しかし、冗長性のレベルと、プロパティごとに繰り返される定型コードの量が、そのような設計を扱いにくくしているように感じます。ただし、テンプレートを使用してボイラープレートを削減する方法がわかりません。上記のように、少なくとも「パススルーゲッター」のテンプレートを作成する方法があるはずですがactor::get_rotation()
、メンバー関数でパラメーター化する方法がわかりません。これは、あなたがする必要があるようです.
このような冗長性を減らしたり、ボイラープレートの使用を減らしたりするためのアイデアを持っている人はいますか?