Здравствуйте, k.o., Вы писали:
KO>Здравствуйте, Galiulin Rishat Faimovich, Вы писали:
GRF>>Попробуйте, пожалуйста, это:
GRF>>GRF>>void sink1( in< std::unique_ptr< const A > > arg)
GRF>>{
GRF>> sink( in_( std::move( arg()() ) ) );
GRF>>}
GRF>>
KO>А самому? Вас же на ideone.com не забанили, надеюсь? В любом случае, результатом arg() будет константная ссылка на unique_ptr<const A>, у которого, разумеется, нет оператора ().
KO>Попробуйте повторить этот пример используя ваш specification.hpp.
Тогда я не понял ваш переидущий ответ
KO>>>Кроме того, у этого подхода есть ещё, скажем так, концептуальная проблема, из-за того что некоторые способы передачи параметров не укладываются в in, in_out и out. Например, мы хотим передавать владение unique_ptr дальше по цепочке вызовов:
KO>>>KO>>>void sink( std::unique_ptr< const A > arg)
KO>>>{
KO>>>}
KO>>>void sink1( std::unique_ptr< const A > arg)
KO>>>{
KO>>> sink(std::move(arg));
KO>>>}
KO>>>
GRF>>А где здесь проблема? Можете подробнее? У меня вроде вот этот код работает
GRF>>GRF>>void sink( in< std::unique_ptr< const A > > arg)
GRF>>{
GRF>>}
GRF>>void sink1( in< std::unique_ptr< const A > > arg)
GRF>>{
GRF>> sink( std::move( arg ) );
GRF>>}
GRF>>
KO>Нужно чтобы работал вот такой код:
KO>KO>void sink1( in< std::unique_ptr< const A > > arg)
KO>{
KO> sink( in_( std::move( arg() ) ) );
KO>}
KO>
KO>Понятно, что саму обёртку можно, без проблем, передать дальше.
Зачем тогда здесь скобки у
arg ?