Re[3]: Накидайте плиз задачек на знание языка Си++
От: B0FEE664  
Дата: 07.04.25 11:34
Оценка:
Здравствуйте, rg45, Вы писали:

  Скрытый текст
SP>>Ещё бывает по шаблонам спрашиваю. Прошу написать функцию sum, которая суммирует различные типы

SP>>
SP>>sum(std::string{""}, "abc");
SP>>sum(0, 1.0);
SP>>


R>http://coliru.stacked-crooked.com/a/c4b88d70e5067c24

R>
R>#include <iostream>

R>template <typename T, typename...X>
R>decltype(auto) sum(T&& t, X&&...x)
R>requires requires {(std::forward<T>(t) + ... + std::forward<X>(x));}
R>{
R>    return (std::forward<T>(t) + ... + std::forward<X>(x));
R>}

R>int main() {
R>    std::cout << sum("Hello", std::string(", World"), '!') << std::endl;
R>}
R>

R>Так норм?
ага

R>Это, скажем так, параноидальный уровень обобщенности. Этот вариант учитывает, что operator+ может быть перегружен пользователем и иметь побочные эффекты и самую безумную семантику. Например, модифицировать операнды.

Параноидальный, да, но от дурака не спасает:
  std::cout << sum("1234567890", 'a') << std::endl;

И каждый день — без права на ошибку...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.