В приведенном ниже примере Extra — это шаблон базового класса, который будет включен параметром шаблона Enable.
Функция consteval Enable используется для обнаружения наличия производного элемент данных, возвращаемое значение которого будет использоваться для выбора желаемой версии Enable.
Код: Выделить всё
FooКод: Выделить всё
#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]