Вы не можете иметь std::vector
гетерогенных типов.
Однако у вас может быть std::vector
типа T
, который удовлетворяет концепции. Просто укажите шаблон псевдонима, который ограничен:
template<typename T>
requires Compare<T>
using vec = std::vector<T>;
или с кратким синтаксисом:
template<Compare T>
using vec = std::vector<T>;
Теперь вы можете сделать:
vec<Cat> v;
, но не
vec<int> v;
Обратите внимание, что ваш класс Cat
, как написано в данный момент, не на самом деле соответствует концепции Compare
. Если вы измените тип возвращаемого значения operator<=>
, например:
std::partial_ordering operator<=>(const Cat&) const = default;
, вы можете создать вектор Cat
s:
vec<Cat> a{
Cat{4, "Faisca"},
Cat{4, "Neka"}
};