Re[3]: Modern C++ Design ParameterType
От: Кодт Россия  
Дата: 08.10.12 07:48
Оценка: -1
Здравствуйте, rpz, Вы писали:

rpz>Да.. с выводом что-то затупил. Только вот про rvalue.. Почему к rvalue то приводится?

Потому что функция объявлена так: fooo(T). Если бы была fooo(T&) — то принимала бы lvalue.

rpz>
rpz>template<typename T>
rpz>void fooo(T i){T& ri=i;std::cout<<&i<<"fooo(T)\n";}
rpz>

rpz>Берется адрес переменной, создается ссылка на нее. Значит i — lvalue. Или я не так понял что-то?
Это адрес локальной копии, а не внешнего оригинала.

К>>Кстати сказать, у переменной a и ссылки на ней ra тип один и тот же — это A, а вовсе не A&.

rpz>Да, действительно
rpz>А почему так сделано?

Ну, так уж сделано. Точного объяснения я не помню, нужно вчитываться в отцов-основателей (т.е. Страуструпа).

К>>Если же явно указывать параметр funcBy<int>, funcBy<A>, funcBy<A&>, funcBy<const A&> — то вывод будет ожидаемо разный.

rpz>Т.е. получается только таким образом можно использовать ParameterType? С явным указанием параметра?
rpz>
rpz>    funcBy<A&>(client::A_TypeTraits<A&>::ParameterType(ra));
rpz>

rpz>Какая-то ерунда так получается. Приходится 2 раза писать тип

Конечно, ерунда. Нужно было просто написать funcBy(ra) или funcBy<A&>(ra). Зачем эту косвенность, да ещё с созданием временной копии?
Перекуём баги на фичи!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.