ideas icon indicating copy to clipboard operation
ideas copied to clipboard

Опциональные члены шаблонного класса по requires

Open Izaron opened this issue 3 months ago • 0 comments

<Описание вашей идеи> Уже есть возможность определять функцию для шаблонного класса, только если какое-то выражение удовлетворяет requires clause:

double get_sample() const
    requires requires (const T& t) { t.get_sample(); }
{
    return t.get_sample();
}

Нужно иметь возможность делать так же для членов класса, то есть иметь или не иметь данное поле согласно условию:

template<typename T>
class Sampler {
    // ...
private:
    double sample_ requires requires (const T& t) { t.get_sample(); };
    int kek_ requires std::integral<T>;
}

<Примеры, где ваша идея будет полезна. Чем больше примеров и чем большую аудиторию они охватывают - тем лучше> Везде, где из-за свойств шаблонной сущности меняется размер класса. Например делетеры в умных указателях (а-ля std::unique_ptr). Или отсутствие поля "size", если он указан в шаблоне (а-ля std::span).

Izaron avatar Apr 02 '24 18:04 Izaron