0

所有権、パイプラインのような相互作用、ステートマシンの動作など、何度も必要なオブジェクトの動作があります。これは、c++に関する非常に有名な本で「ポリシー」と呼ばれる新しいデザインパターンを試す良い機会だと思いました。

今、クラスを作成するのに苦労しています

template <
  class T,
  template <typename T> class pOwnership
  template <typename T> class pInteraction
>
class object : public pOwnership<T>, public pInteraction<T>
{...}

これは、所有権と相互作用を扱う2つのポリシーを取る必要があります。たとえば、pOwnershipにはメソッドがあります

void add(T &obj)

内部リストにオブジェクトを追加します

std::vector<T*>.

(別の所有権ポリシーを使用します。たとえば、所有権が必要ない場合、void add(T&obj)も宣言されていない可能性があり、間違ったアプリケーションコードを使用するとコンパイル時エラーが発生します)

これで、タイプTが最終的なポリシーホストクラスになります。これは、オブジェクトクラスを意味します。

typedef template<object, pOwnershipRecursive, pInteractionPipeline> myObject;

もちろん、オブジェクトはそれ自体がテンプレート型であるため、コンパイラエラーが発生します。

myObjectのようなクラスをどのように実現できますか?

4

1 に答える 1

0

CRTPを使用することが期待されています。

class myObject : public object<myObject, 
                 pOwnershipRecursive, 
                 pInteractionPipeline>
{
   // your real content here: 
   // an object that consists solely of policies is probably useless
};
于 2013-02-11T16:45:23.413 に答える