Условно добавьте некоторые элементы данных в базовый класс при условии наличия производного элемента данных.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++»