gpt4 book ai didi

c++ - 如何在UML类图中绘制C++概念?

转载 作者:行者123 更新时间:2023-12-03 06:50:52 26 4
gpt4 key购买 nike

如何在UML类图中绘制C++概念?
具体来说,我有以下代码:

template<typename T>
concept Printable = requires(T a, std::ostream &where) {
{ where << a };
};

template<typename T>
concept Identifiable = requires(T a) {
{ a.getId() } -> std::convertible_to<std::string>;
};

template<typename T>
concept Listable = Identifiable<T> && Printable<T>;

然后是一个类:
template<Listable T>
class Liste {
...
void add(T *data);
...
}
如果它是常规模板,则只需将 T放在类角落的正方形中即可。但是这些概念呢?

最佳答案

C++ concepts定义对与模板类相关联的类型的约束:

  • 由于UML支持class template,因此您通常会使用大括号或自然语言或OCL将该constraints的参数表示为大括号。前者在早期设计阶段是完美的。但是,如果您需要这种级别的准确性,那么您也可以考虑使用与C++相同的语法而不是自然语言来实用地表达它。
  • 或者,您也可以将C++概念作为UML中的一种通用类型来处理。然后,您可以在类模板中模板参数的类型定义中以更易读的方式使用该概念。这将更方便阅读,并且更接近C++的想法。问题在于,在UML中没有预见到定义此类通用类型的任何事情。因此,您可以使用and-hoc profile扩展UML以使用«concept» stereotype。然后,您将定义与类完全相同的概念,使用UML constraints定义约束,并使用UML class templates中的概念。

  • 在这里,第二种方法是什么样的。注意两个概念之间的实现 dependency:
    enter image description here

    关于c++ - 如何在UML类图中绘制C++概念?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63944197/

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