Ric*_*dor 5 c++ inheritance templates
我有一个关于我最近拿到的代码的问题.我只是想知道,如果在C++模板范例是正确的或有用做以下继承(只有3类为例):
template< class I, class P, class D, unsigned int ID = 0 >
class PathFilter : public Filter< I, P, 1 >
{
...
}
Run Code Online (Sandbox Code Playgroud)
template< class I, class A, unsigned int N = 1 >
class Filter : public Algorithm< I, A >
{
...
}
Run Code Online (Sandbox Code Playgroud)
template< class I, class A >
class Algorithm : public A //This line
{
...
}
Run Code Online (Sandbox Code Playgroud)
我的问题具体是关于第三个例子中的继承.使它如此'通用'而不精确是否有用?通过更通用的代码来妥协可理解的代码是一个不错的选择?
我首先要问的是因为我不是C++模板的专家,但也因为我看到使用模板很难理解这些代码(通常模板的名称对其内容一无所知).有什么建议?
您正在做的是一个mixin 类(特别Algorithm是您的类)。
作为参考,您可以参考http://en.wikipedia.org/wiki/Mixin或http://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 明智地建议的那样。
| 归档时间: |
|
| 查看次数: |
264 次 |
| 最近记录: |