0

我一遍又一遍地需要对象行为,包括所有权、类似管道的交互、状态机行为等。我认为这是一个很好的机会,可以在一本关于 C++ 的非常著名的书中尝试一种称为“策略”的新设计模式。

现在我很难创建一个类

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

这应该采取两个政策来处理所有权和互动。例如, pOwnership 有一个方法

void add(T &obj)

它将一个对象添加到内部列表

std::vector<T*>.

(使用另一个所有权策略,例如当我不需要所有权时,也可能未声明void add(T &obj),如果使用错误的应用程序代码会导致编译时错误)

现在类型 T 应该是最终的策略宿主类,即对象类:

typedef template<object, pOwnershipRecursive, pInteractionPipeline> myObject;

当然object本身就是一个模板类型,导致编译器错误。

如何实现像 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 回答