gpt4 book ai didi

c++ - 从模板继承 C++

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:45:09 25 4
gpt4 key购买 nike

我对最近拿到手的一个代码有疑问。我只想知道在 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++ 模板方面的专家,还因为我发现使用模板很难理解这段代码(通常模板的名称并不能说明其内容)。有什么建议吗?

最佳答案

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

作为引用,您可以查阅,例如http://en.wikipedia.org/wiki/Mixinhttp://en.wikipedia.org/wiki/Composite_pattern .

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

换句话说,您让自己(或您的用户)可以自由地添加或更改 Algorithm 的行为。不知何故“之后”。您真正的收获是仅依靠编译器而不是某些类似动态绑定(bind)的机制(例如重写虚函数)来实现这种灵 active 。你的最后一个类Algorithm<A> ,事实上,它是在编译时构建的,它可能与您编写 Algorithm<A> 时获得的类一样高效。显式(即显式地将策略 A 包含在 Algorithm手动)。

编辑:

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

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

关于c++ - 从模板继承 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12916574/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com