C / C ++ C ++ 11 станд :: функция и станд :: связывать использование

станд :: Bind ()

       Std :: связывает в основном используется для связывания для формирования целевой функции, как правило , используется для генерации функции обратного вызова, Cocos ROLLBACK функции по станду :: свяжи и станд :: функция для достижения. Для того, чтобы понять два момента:

1. Связывание функции глобального или статических переменный меньше связывающие члены функции - члена, и не требует следующих ссылки

    // связывающей глобальной функции
    Auto STD :: = pFunc привязки (func1 ,. 3);
    / / связывающийся статическая функция
    pFunc = станд :: привязка (Func :: func6, 3);
    // связать перед тем функции члена класса, необходимо добавить ссылку функцию, мульти-переменной параметра Fuc
    Func FUNC;
    pFunc = зЬй :: привязать (& Func func2 ::, FUNC ,. 3);

  2. заполнитель станд :: заполнители :: _ 1 в настоящем описании , представляют входные параметры, а также параметры в первом ряду, анализ код более очевидной

    #include <The iostream>
    #include < Функциональное> с
    использованием имен STD;
    класс Func
    {
    общественности:
        статической силы Func6 (NUMA INT, INT Numb, внутр NUMC)
        {
            станд :: соиЬ << NUMA << "" << онемели << "" << NUMC << епсИ;
        }
        Недействительным func2 (интермедиат NUMA, внутр онемела, внутр NUMC, StD :: строка имя)
        {
            зЬй :: COUT << NUMA << "" << онемели << "" << NUMC <<»" << имя << ENDL;
        }
    }
    Пустота callFunc (станд :: Функция <аннулируются (Int А, Int б)> вызов)
     {
         вызова (1,2);
     }
     Недействительным func1 (интермедиат NUMA, внутр онемела, внутр NUMC)
     {
         станд :: соиЬ << NUMA << "" << онемели << "" << NUMC << епсИ;




       callFunc (станд :: Bind (func1, STD :: заполнители :: _ 2, станд :: заполнители :: _ 1, 3));
       callFunc (станд :: Bind (func1, STD :: заполнители :: _ 2, 3, станд :: заполнители :: _ 1));
       callFunc (станд :: Bind (Func :: func6, STD :: заполнители :: _ 1, станд :: заполнители :: _ 2, 3));
       callFunc (Std :: Bind (& Func :: func2, функ, STD :: заполнителей :: _ 1, станд :: заполнители :: _ 2, 3, "название"));
    }

运行结果如下      

 

 

 


 
:: Функция станд

        станд :: функция равна указателю функции, указатель функции проще в использовании по сравнению с, запишите его несколько применений: в глобальной или статической функции, функции - члены класса, лямбда - выражений и функций моделирования. Точка для глобальных функций или использование станд :: функции <ничтожной ()> статические функции testFunc = FUNC3, точки к функции - члена класса, переменные - члены должны развивать класс функция принадлежит testFunc = зЬй :: Bind (& Func :: func2, FUNC, 1, 2, 3, "название "). Код выглядит следующим образом :

    #include <iostream>  
    #include <String>
    #include <iostream>
    #include <Functional>
    от употребления имен STD;
    класс Func
    {
    общественности:
        INT SUM;
        Func ()
        {
            SUM = 2;
        }
        недействительным func2 (интермедиат NUMA, Numb INT, INT NUMC, имя STD :: String)
        {
            STD :: COUT NUMA << << "" << << Numb "
        }
        Недействительным func4 ()
        {
            станд :: соиЬ << "func4" << епсИ;
        }
        Аннулируются оператор () (Int А, внутр б)
        {
            зЬй :: COUT << "Оператор:" << сумму << " "<< а <<"" << B << Endl;
        }
        Статической силы func6 (интермедиат NUMA, внутр онемела, внутр NUMC)
        {
            станд :: соиЬ << NUMA << "" << онемели << "" << NUMC << епсИ;
        }
        Статической силы func5 ()
        {
            станд :: соиЬ << "статического FUNC" << епсИ;
        }
    };
     недействительный callFunc (станд :: Функция <аннулируется (Int А, Int б)> вызов)
     {
         вызов (1,2);
     }
     Недействительные FUNC3 ()
        testFunc = станд :: Bind (& Func :: func2, FUNC, 1, 2, 3, "название");         testFunc ();





















        // Lambda表达式
        станд :: соиЬ << "Лямбда表达式" << епсИ;
        testFunc = [=, & resultInt] () {станд :: соиЬ << сумма << епсИ; resultInt + = 100; };
        testFunc ();
        соиЬ << "reslutInt является" << resultInt << епсИ;
        //仿函数
        станд :: соиЬ << "仿函数" << епсИ;
        станд :: Функция <аннулируются (Int А, Int б)> abFunc = FUNC;
        abFunc (10, 20);
        станд :: соиЬ << resultInt << станд :: епсИ;
    }

рекомендация

отwww.cnblogs.com/YZFHKMS-X/p/12067252.html