Task #2112
closedFace: use lambda expression and smart pointers
100%
Description
Enhance Face
and Face::Impl
with C++11 features:
- use lambda expression instead of
bind
where applicable - use
unique_ptr
on member fields where they are currently regular pointers - use
unique_ptr
instead ofshared_ptr
where applicable
Updated by Joao Pereira over 9 years ago
- Status changed from New to In Progress
- Start date set to 05/18/2015
Start changes
Updated by Joao Pereira over 9 years ago
- Status changed from In Progress to Code review
- % Done changed from 0 to 100
Updated by Joao Pereira over 9 years ago
Previously:
RegisteredPrefix::Unregistrator bindedUnregistrator =
bind(unregistrator, m_face.m_nfdController, unregisterParameters, _1, _2,
options);
New version:
RegisteredPrefix::Unregistrator bindedUnregistrator =
[this, &unregistrator, unregisterParameters, options] (const Controller::CommandSucceedCallback& successCallback,
const Controller::CommandFailCallback& failCallback)
{
((*this->m_face.m_nfdController).*unregistrator)(unregisterParameters, successCallback, failCallback, options);
};
I have been asked to revert this part and use again bind function instead of lambda.
========
My answer:
Before changing the Controller attribute we had a pointer and it made sense to allow it to be copied into the bind function. But now that we have a unique_ptr
we cannot copy the pointer, nor can we copy the object inside the pointer because Controller is noncopyable.
If you think we should keep the shared I see 2 solutions:
Keep the pointer instead of having a
unique_ptr
Change the
unique_ptr
to ashared_ptr
so it can be copied around
With the lambda what we do is to copy the reference of the face_impl
in order to use it. Can we do this with the bind?
Updated by Davide Pesavento over 9 years ago
Updated by Junxiao Shi over 9 years ago
- Status changed from Code review to Closed