我对我最近拿到的代码有疑问。我只想知道在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 ++模板的专家,但也因为我看到使用模板很难理解这些代码(通常模板的名称对其内容一无所知)。有什么建议?
答案 0 :(得分:2)
你正在做的是 mixin类(特别是你的班级Algorithm
就是那个)。
作为参考,您可以咨询,例如http://en.wikipedia.org/wiki/Mixin或http://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明智地建议。