Как сказано в другом ответе, пример 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:
Факт параметр шаблона может быть любым из целого набора производных классов не имеет значения, поскольку он может быть чем-то другим.
Добавление производного класса в диаграмму для получения полного CRTP:
Из вашего замечания:
, который не отвечает на мой вопрос; случай, когда параметр шаблона должен быть производным классом, вообще не упоминается.
В своем вопросе вы просто говорите, что может быть, теперь вы хотите его должен быть.
Примечание. CRTP определяется двумя классами, а не только базовым классом. В любом случае, если вы хотите, чтобы это ограничение касалось параметра шаблона ( T ), просто используйте ограничение, может быть T.parents-> includes (Base) , даже если я не уверен в использование T в нем должно применяться к значению (ям) T , а не к T , который является классом
Из вашего замечания к моему ответу:
Другая идея: можно ли было бы нарисовать соединитель сотрудничества из базовых классов T в пунктирной рамке вниз? каждому изображенному классу, производному от base?
Я не понимаю, как в этом случае может появиться коллаборация. Может быть, вы думаете о зависимости?
Для меня вы не можете нарисовать отношения из T в пунктирной рамке, и даже возможно, что это не означает, что вы хотите.
Вместо того чтобы рисовать отношение из T к производным классам, просто рисуйте производные классы с каждым разом наследования и связывания, что является правильным способом в UML.