Условно добавьте некоторые элементы данных в базовый класс при условии наличия производного элемента данных.C++

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

Сообщение Anonymous »

Я хотел бы условно добавить некоторые элементы данных в базовый класс при условии наличия производного элемента данных.
В приведенном ниже примере Extra — это шаблон базового класса, который будет включен параметром шаблона Enable.
Функция consteval Enable используется для обнаружения присутствия производного класса. элемент данных, возвращаемое значение которого будет использоваться для выбора желаемой версии Enable. — это базовый класс, к которому мы хотим добавить дополнительные функции, а Bar — это производный тип, который объявляет необходимый член, который мы используем для включения дополнительных функций.

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

#include 

template
struct Extra
{
static constexpr bool is_enabled = false;
};

template
struct Extra
{
static constexpr bool is_enabled = true;

int extra { 42 };
};

template
consteval bool enable()
{
if constexpr (requires { T::enable_extra; })
return true;
else
return false;
}

template
struct Foo : Extra
{
using Base = Extra;
using Base::is_enabled;

void eval()
{
if constexpr (is_enabled)
{
if (static_cast(this)->enable_extra)
std::cout 

Подробнее здесь: [url]https://stackoverflow.com/questions/78697590/conditionally-add-some-data-members-to-a-base-class-conditioned-on-the-presence[/url]

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