UML-диаграмма для любопытно повторяющегося шаблона - PullRequest
2 голосов
/ 10 февраля 2020

Как правильно нарисовать диаграмму UML для C ++ CURLYURURURING шаблона шаблона (CRTP) без репликации базового класса для каждого унаследованного класса, то есть таким образом, чтобы отражать реализацию, а не ситуацию после компиляции?

Вопрос сводится к следующему: что записать в пунктирную рамку общего шаблона-базового класса, если параметром шаблона может быть любой из целого набора производных классов?

1 Ответ

3 голосов
/ 11 февраля 2020

Как сказано в другом ответе, пример C ++ CURLYURURURING шаблона шаблона (CRTP):

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

что мне записать в пунктирную рамку общего шаблона-базового класса, если Параметр шаблона может быть любым из целого набора производных классов?

Пунктирная рамка класса шаблона показывает параметры шаблона, в случае класса Base:

enter image description here

Факт параметр шаблона может быть любым из целого набора производных классов не имеет значения, поскольку он может быть чем-то другим.

Добавление производного класса в диаграмму для получения полного CRTP:

enter image description here


Из вашего замечания:

, который не отвечает на мой вопрос; случай, когда параметр шаблона должен быть производным классом, вообще не упоминается.

В своем вопросе вы просто говорите, что может быть, теперь вы хотите его должен быть.

Примечание. CRTP определяется двумя классами, а не только базовым классом. В любом случае, если вы хотите, чтобы это ограничение касалось параметра шаблона ( T ), просто используйте ограничение, может быть T.parents-> includes (Base) , даже если я не уверен в использование T в нем должно применяться к значению (ям) T , а не к T , который является классом

enter image description here


Из вашего замечания к моему ответу:

Другая идея: можно ли было бы нарисовать соединитель сотрудничества из базовых классов T в пунктирной рамке вниз? каждому изображенному классу, производному от base?

Я не понимаю, как в этом случае может появиться коллаборация. Может быть, вы думаете о зависимости?

Для меня вы не можете нарисовать отношения из T в пунктирной рамке, и даже возможно, что это не означает, что вы хотите.

Вместо того чтобы рисовать отношение из T к производным классам, просто рисуйте производные классы с каждым разом наследования и связывания, что является правильным способом в UML.

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...