cpp-ru / ideas

Идеи по улучшению языка C++ для обсуждения
https://cpp-ru.github.io/proposals
Creative Commons Zero v1.0 Universal
89 stars 0 forks source link

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

Open Izaron opened 3 months ago

Izaron commented 3 months ago

<Описание вашей идеи> Уже есть возможность определять функцию для шаблонного класса, только если какое-то выражение удовлетворяет 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).