Как написать шаблонный класс C++23, который предоставляет реализацию операторов для его производных?C++

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

Сообщение Anonymous »

Мне хотелось бы иметь (шаблон) базовый класс, который, помимо общих свойств, уже реализует операторы производных классов.
У меня был такой код:

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

#include 
#include 

template 
requires(std::derived_from)
class MyBaseClass
{
// Has some base properties
public:
bool operator==(const CLAZZ other) const
{
return true; // For sure this is more complex
}

bool operator==(const std::optional other) const
{
return true; // For sure this is more complex
}
};

class MyDerivatedClass : public MyBaseClass
{
// More properties added
};
Подумав дважды, стало ясно, что это не сработает, потому что операторам потребуются типы, которых пока не существует.
Потому что из этого я использую только текущий класс вместо последнего класса, несмотря на то, что это приводит к риску того, что случайно существуют два производных класса, которые не должны иметь совместимого сравнения (меры безопасности на самом деле не станут проблемой для моего варианта использования). Наверное).

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

#include 
#include 

template 
requires(std::derived_from)
class MyBaseClass
{
// Has some base properties
public:
bool operator==(const MyBaseClass other) const
{
return true; // For sure this is more complex
}

bool operator==(const std::optional other) const
{
return true; // For sure this is more complex
}
};
К сожалению, даже тогда я получаю сообщение об ошибке в предложении require о том, что MyBaseClass пока не определен.
Затем я попробовал использовать определение пересылки, которое сообщает мне, что предложение require несовместимо:

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

template 
class MyBaseClass;
Любые предложения, как я мог бы реализовать это и гарантировать, что операторы работают только с самим производным классом или, по крайней мере, только с производными этого базового класса с соответствующим шаблоном аргумент?


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

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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