Я столкнулся с этим примером класса http://www.boost.org/doc/libs/1_49_0/libs/smart_ptr/sp_techniques.html#as_lock, и я борюсь с синтаксисом.Синтаксис параметров
class shared_lock
{
private:
shared_ptr<void> pv;
public:
template<class Mutex> explicit shared_lock(Mutex & m): pv((m.lock(), &m), mem_fn(&Mutex::unlock)) {}
};
I (кажется, я) понимать все, кроме этой части "(m.lock(), & м)". Все это кажется первым параметром для инициализации умного указателя. Что оценивает этот составной оператор? Это просто адрес m? Почему блокировка помещена там как часть списка параметров (и как это законно)? Вместо этого я бы ожидал выписки вроде:
template<class Mutex> explicit shared_lock(Mutex & m): pv(&m, mem_fn(&Mutex::unlock)) {m.lock();}
Является ли мой альтернативный оператор изменением функциональности?
http://en.wikipedia.org/wiki/Comma_operator – jrok
спасибо, это в значительной степени объясняет это. – helmk