Re[7]: Реализация IN, IN-OUT и OUT параметров функций
От: k.o. Россия  
Дата: 19.09.11 05:49
Оценка: 2 (1)
Здравствуйте, Galiulin Rishat Faimovich, Вы писали:

GRF>Вроде написал более рабочий вариант specification.hpp:


Да, уже лучше, только у нас, по прежнему, не поддерживается преобразование unique_ptr<A> -> unique_ptr<const A>, можно, конечно, сделать его явно:

std::unique_ptr< A > p2( new A );
sink2( in< std::unique_ptr< const A > >( std::move( std::unique_ptr< const A >( std::move(p2) ) ) ) );


Но, я надеюсь, никому не придет в голову сказать что этот ужас читать легче чем

std::unique_ptr< A > p1( new A );
sink1( std::move( p1 ) );


Кроме того, у этого подхода есть ещё, скажем так, концептуальная проблема, из-за того что некоторые способы передачи параметров не укладываются в in, in_out и out. Например, мы хотим передавать владение unique_ptr дальше по цепочке вызовов:

void sink( std::unique_ptr< const A > arg)
{
}
 
void sink1( std::unique_ptr< const A > arg)
{
  sink(std::move(arg));
}


После этого можно будет вспомнить о существовании rvalue-references и необходимости поддерживать perfect forwarding.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.