gpt4 book ai didi

c++ - Curiously recurring 模板模式的 UML 图

转载 作者:行者123 更新时间:2023-12-01 14:43:28 26 4
gpt4 key购买 nike

如何在不复制每个继承类的基类的情况下正确绘制 C++ 奇怪循环模板模式 (CRTP) 的 UML 图,即以反射(reflect)实现而不是编译后情况的方式?

问题归结为:如果模板参数可以是一整套派生类中的任何一个,我应该在通用模板基类的虚线框中写什么?

最佳答案

正如在另一个答案中所说,C++ Curiously recurring template pattern (CRTP) 的一个例子是:

template <class T>
class Base
{
// methods within Base can use template to access members of Derived
};
class Derived : public Base<Derived>
{
// ...
};

what do I write into the dashed box of the common template-baseclass if the template parameter can be any of a whole set of derived classes?



模板类的虚线框显示模板参数,在类 Base 的情况下:

enter image description here

事实上模板参数 可以成为一整套派生类中的任何一个都无关紧要,因为它可以是其他任何东西。

在图中添加派生类以获得完整的 CRTP:

enter image description here

根据您的评论:

that doesn't answer my question; the case that the template parameter must be a derived class isn't mentioned at all.



在您的问题中,您只需说 可以是,现在你想要它 必须是。

注意 CRTP 由两个类定义,而不仅仅是由基类定义。无论如何,如果您想对模板参数 (T) 进行限制,只需使用约束,可能是 T.parents->includes(Base) 即使我不确定在其中使用 T,它必须适用于值T 的 (s) 而不是 T 本身,它是一个类

enter image description here

从你的评论到我的回答:

Another idea: would it be allowed to draw a collaboration connector from the base-classes T in the dashed box down to every depicted class that is derived from base?



我看不出在这种情况下协作会如何出现,您可能会考虑依赖关系吗?

对我来说,你不能从虚线框中的 T 中得出关系,甚至它也有可能不表明你想要什么。

与其绘制从 T 到派生类的关系,不如在每次继承和绑定(bind)时绘制派生类,这是 UML 中的正确方法。

enter image description here

关于c++ - Curiously recurring 模板模式的 UML 图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60145328/

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