Я вижу этот шаблон повсюду в моем коде и в библиотеках, но, похоже, его имя или абстракция отсутствуют, и я не могу его найти.
Пример (псевдокод)
T foo( T x, void f(T&) )
{
T y = x;
f( y );
return y;
}
В основном: принять значение и функцию, которая преобразует это значение.Сделайте копию значения, преобразуйте его и верните.
Реальные примеры (C ++)
T operator+(const T& x, const T& y)
{
T z = x; // Make a copy
operator+=(z, y); // Modify in place
return z;
}
Vector3 Vector3::normalized() const
{
Vector3 x = *this; // Make a copy
x.normalize(); // Modify in place
return x;
}
T sorted(T const& x)
{
T y = x; // Make a copy (yeah, yeah, could have passed by value)
sort( y ); // Modify in place
return y;
}
По сути, у вас есть функция на месте (с побочными эффектами).) и сделать из него функцию без места (без побочных эффектов).
Есть ли название для этого шаблона?Знаете ли вы какие-либо библиотеки или языки, которые его используют?Очевидно, что функциональные языки не будут использовать его, потому что у них нет ссылочных непрозрачных функций.