я считаю следующее, чтобы быть самым дешевым способом связывания локальной переменной закрытия:самый дешевый способ связывания локальной переменной закрытия
void ByRValueReference(A&& a) {
}
std::function<void()> CreateClosureByRValueReference() {
A a;
std::function<void()> f = std::bind(&ByRValueReference, std::move(a)); // !!!
return f;
}
Однако, он не компилируется под Clang 3.1:
error: no viable conversion from '__bind<void (*)(A &&), A>' to 'std::function<void()>'
и gcc 4.6.1:
/usr/include/c++/4.6/functional:1778:2: error: no match for call to ‘(std::_Bind<void (*(A))(A&&)>)()’
Я нарушаю стандарт или просто разбитые стандартные библиотеки?
Я думаю, что его 'функция'. –
RedX
На самом деле, это немного дорого стоит здесь: 'std :: function'. Если вы действительно заботитесь об эффективности, я бы возвращал 'decltype (std :: bind (...))' – pmr