从模板c ++继承

时间:2012-10-16 14:10:12

标签: c++ templates inheritance

我对我最近拿到的代码有疑问。我只想知道在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 ++模板的专家,但也因为我看到使用模板很难理解这些代码(通常模板的名称对其内容一无所知)。有什么建议?

1 个答案:

答案 0 :(得分:2)

你正在做的是 mixin类(特别是你的班级Algorithm就是那个)。

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

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

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

修改

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

在那里,政策名称(您的A)以清晰的形式出现,名称清晰,由@ full.stack.ex明智地建议。