C ++: переменная переподничества общего типаC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 C ++: переменная переподничества общего типа

Сообщение Anonymous »

Я пытаюсь повторно использовать память кучи для общих типов путем повторного переменного.

Код: Выделить всё

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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»