Код: Выделить всё
template //unconstrained type
//...
{
//in some complex procedural logic
T rebindable = .../*r-value*/;
//...
//some procedure dependent case:
T rebindable = .../*different r-value*/; //rebind (I am aware this does not work)
}
< /code>
Почему это вопрос, который стоит задать: < /p>
Многие процедурные алгоритмы поддерживают и постоянно работают по памяти через их область. будет преодолен путем использования итерации, например, реализации корневого искателя с интеллектуальной бисекцией по сравнению с потенциально невыизводимыми численными типами. < /p>
Однако некоторые более сложные процедурные алгоритмы не могут быть легко написаны функционально, особенно если повторение определяется по процедурному состоянию. Алгоритмы.Unique_ptrКод: Выделить всё
template //still unconstrained (which is a plus)
//...
{
auto ptr = std::unique_ptr{.../*dangling reference (T*)*/};
//...
ptr = std::unique_ptr{.../*different dangling reference*/};
}
< /code>
Это решает проблему не ограничения типа, однако используемая память-это не память кучи. < /p>
Назначение: < /p>
template
requires std::assignable_from //type constraint!
//...
{
T assignable = .../*r-value*/;
//...
assignable = .../*different r-value*/;
}
< /code>
, в то время как он находится на куче, он поставляется по стоимости ограничения типа.template //type constraint!
//...
{
T assignable = .../*r-value*/;
//...
assignable.~T();
new (&assignable) T {.../*different r-value*/};
}
Подробнее здесь: https://stackoverflow.com/questions/686 ... neric-type