2014-06-20 3 views
16

В принципе, я хотел бы иметь следующий семантический:Functor ссылки через станд :: функция

#include <functional> 
#include <iostream> 

class test 
{ 
    public: 
    void add(std::function<void()> f) 
    { 
     f(); 
    } 

    void operator()() 
    { 
     ++x; 
    } 

    int x = 33; 
}; 

int main() 
{ 
    test t; 
    t.add(t); 
    // wanted: x == 34 instead: x == 33 since add(t) copies it 
} 

Я понимаю станд :: функция оборачивает копию вызываемого объекта, но есть ли способ, чтобы получить ссылка на вызываемый объект с использованием std :: function?

+0

Пожалуйста, помечать вопрос с языком программирования, который вы используете, так что он показывает в соответствующих списках. – IMSoP

+0

+1 для такого приятного примера для 'std :: ref()' – ikh

ответ

19

Вы хотите использовать функцию std::ref шаблона для создания reference wrapper для экземпляра:

std::reference_wrapper шаблон класса, который оборачивает ссылку в Copyable, назначаемым объекта.

Функциональных шаблоны ref и cref являются вспомогательными функциями, которые генерируют объект типа std::reference_wrapper, используя аргумент шаблона вывода, чтобы определить аргумент шаблона результата.

Вы бы использовать его как это:

t.add(std::ref(t)); 
+0

Perfect: o Это должно быть объяснено в онлайн-ссылках: / –

Смежные вопросы