Как написать шаблонный класс 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

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