gpt4 book ai didi

c++ - 允许轻松替换类函数

转载 作者:搜寻专家 更新时间:2023-10-31 01:57:46 26 4
gpt4 key购买 nike

我经常在一个类中允许选择一个功能。例如,我有一个具有 GetNextNode() 函数的类,该函数的用法类似于 MyClass::DoIteration(){GetNextNode(); 。我想允许用户从 GetNextNode 的许多可能实现中选择一个来确定应如何确定要处理的下一个节点。我还希望允许我的代码的用户轻松提供他们自己的实现。

到目前为止,答案是使 GetNextNode() 成为虚拟的并重新实现它的 MyClass 的子类...

当我有两个这样的可互换函数时,我的问题就出现了。如果我有 Function1()Function2(),它们都有 N 个可能的实现,那么我将不得不提供 2N 个子类,以允许用户选择这些函数中的哪对使用。一般来说,它会更糟(如果有超过 2 个这样的函数)。

请注意,这些函数需要访问 MyClass 中的数据。

是否有我缺少的“模式”允许选择这样的“插件”?

最佳答案

实际上我认为他正在寻找的是基于策略的设计,参见http://en.wikipedia.org/wiki/Policy-based_design .

编辑:

示例,(显然不能编译,但希望你明白了。你为 IterationPolicy 提供了一个模板参数,它应该是一个提供 getNextNode 函数的类。你可以提供一个默认策略和各种与您的类交替策略。用户也可以编写自己的策略,前提是他们实现了适当的接口(interface)。避免了与继承相关的问题。

template <typename IterationPolicy = DefaultIterationPolicy>
class class X {
IterationPolicy iterationPolicy;
void DoIteration() { iterationPolicy.getNextNode(); }
};

关于c++ - 允许轻松替换类函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5129001/

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