5

我有一个关于我最近收到的代码的问题。我只想知道在 C++ 模板范例中进行以下继承是否正确或有用(仅以 3 个类为例):


template< class I, class P, class D, unsigned int ID = 0 >
class PathFilter : public Filter< I, P, 1 >
{
...
}

template< class I, class A, unsigned int N = 1 >
class Filter : public Algorithm< I, A >
{
...
}

template< class I, class A >
class Algorithm : public A //This line
{
   ...
}

我的问题是关于第三个例子中的继承。让它如此“通用”而不精确有用吗?通过更通用的代码来妥协可理解的代码是一个不错的选择吗?

我首先问是因为我不是 C++ 模板方面的专家,还因为我发现使用模板很难理解这段代码(通常模板的名称没有说明它的内容)。有什么建议吗?

4

1 回答 1

2

你正在做的是一个mixin 类(特别是你的类Algorithm)。

作为参考,您可以参考,例如http://en.wikipedia.org/wiki/Mixinhttp://en.wikipedia.org/wiki/Composite_pattern

实际上,您正在指定“某些功能(由 指定A)被继承或仅由子类(即Algorithm)重用”。(引自第一篇文章)

换句话说,您正在让自己(或您的用户)自由地添加或更改行为以Algorithm某种“事后”。您真正的收获是仅依靠编译器而不是某些类似动态绑定的机制(例如,覆盖虚函数)来实现这种灵活性。实际上,您的最终类Algorithm<A>是在编译时构建的,它可能 与您明确编写的类一样有效(即,在手工编写时Algorithm<A>明确包括策略)。AAlgorithm

编辑

我还建议查看有关基于策略的设计的维基百科页面(http://en.wikipedia.org/wiki/Policy-based_design)。

A正如@full.stack.ex 明智地建议的那样,在那里,策略名称(您的)以清晰的形式出现,并带有清晰的名称。

于 2012-10-16T14:17:01.277 回答