Re[4]: Аналог "discarding _" для С++
От: rg45 СССР  
Дата: 30.06.25 07:27
Оценка: 6 (1)
Здравствуйте, so5team, Вы писали:

S>Самое простое, что сразу приходит в голову:

S>
S>template<typename T>
S>struct discarding_arg
S>{
S>    T _tmp;

S>public:
S>    operator T&() &&
S>    {
S>        return _tmp;
S>    }
S>};

S>void f(int & i) {
S>    i = 0;
S>}

S>int main()
S>{
S>    f(discarding_arg<int>{});
S>}
S>



Как вариант:

template<typename T>
T& discarding_arg (T&& _tmp = {})
{
  return std::forward<T&>(_tmp); // До C++23 можно просто "return _tmp;"
}

void f(int & i) {
    i = 0;
}

int main()
{
    // Вариантов использования появляется чуть больше:
    f(discarding_arg<int>());
    f(discarding_arg(42));
    g(discarding_arg(std::vector{1, 2, 3}));
}


Только если присмотреться, окажется, что discarding_arg — это переименованный lvalue
Автор: rg45
Дата: 29.06.25
--
Справедливость выше закона. А человечность выше справедливости.
Отредактировано 30.06.2025 7:53 rg45 . Предыдущая версия . Еще …
Отредактировано 30.06.2025 7:50 rg45 . Предыдущая версия .
Отредактировано 30.06.2025 7:38 rg45 . Предыдущая версия .
Отредактировано 30.06.2025 7:37 rg45 . Предыдущая версия .
Отредактировано 30.06.2025 7:33 rg45 . Предыдущая версия .
Отредактировано 30.06.2025 7:27 rg45 . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.