Оператор трехстороннего сравнения по умолчанию в рекурсивных структурах данныхC++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Оператор трехстороннего сравнения по умолчанию в рекурсивных структурах данных

Сообщение Anonymous »

Я хотел бы использовать оператор трехстороннего сравнения по умолчанию в рекурсивной структуре данных, например:

Код: Выделить всё

struct MyStruct {
int i;
std::vector v;
std::partial_ordering operator(const MyStruct &a) const = default;
};

// Fails: can't infer comparison result type
static_assert(std::same_as);
К сожалению, похоже, существует циклическая зависимость, поскольку оператор по умолчанию зависит от категорий сравнения целых чисел и std::vector, а векторного сравнения Категория зависит от категории сравнения, если ее value_type, а именно MyStruct. Тот факт, что я явно объявил тип сравнения как std::partial_ordering, похоже, не помогает, хотя и должен. В частности, это работает, если я реализую функцию вручную:

Код: Выделить всё

struct MyStruct {
int i;
std::vector v;
std::partial_ordering operator(const MyStruct &other) const {
if (auto r = i  other.i; r != 0)
return r;
return v  other.v;
}
};

// OK
static_assert(std::same_as);
Мои вопросы:

[*]Есть ли способ решить эту проблему? Спецификация запрещает перегрузку std::compare_three_way_result, но есть ли другой способ повлиять на вектор или std::lexicographical_compare_three_way?

[*]Есть ли способ, используя концепции или предложения, обнаружить неполный тип? В качестве альтернативы я мог бы создать свой собственный векторный класс-контейнер, который по умолчанию использует std::partial_ordering, когда тип неполный.



Подробнее здесь: https://stackoverflow.com/questions/788 ... structures
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Объединение космического корабля, то есть трехстороннего оператора сравнения вместе
    Anonymous » » в форуме C++
    0 Ответы
    6 Просмотры
    Последнее сообщение Anonymous
  • Есть ли в PHPUnit встроенная функция сравнения рекурсивных массивов?
    Anonymous » » в форуме Php
    0 Ответы
    13 Просмотры
    Последнее сообщение Anonymous
  • Есть ли в C# какой-либо оператор сравнения, например оператор IN SQL?
    Anonymous » » в форуме C#
    0 Ответы
    15 Просмотры
    Последнее сообщение Anonymous
  • Есть ли метод для трехстороннего слияния каплей?
    Anonymous » » в форуме Python
    0 Ответы
    4 Просмотры
    Последнее сообщение Anonymous
  • Есть ли метод для трехстороннего слияния каплей?
    Anonymous » » в форуме Python
    0 Ответы
    4 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C++»