2012-01-31 2 views
1

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

void myPrinter(const char* text, int number){    
      printf("\n%s %d\n", text, number); 
     } 

    int main() { 

     char *someText="test";   

     boost::function<void(int my_number)> functionWithSavedArgs = boost::bind(&myPrinter, someText, ?????); 

     //then I have to call my function with saved args and give to it only variable "number" like: 
     int myBeautifulNumber = 2012; 
     functionWithSavedArgs(myBeautifulNumber); 
     // echo: test 2012 
    } 

Есть идеи?

ответ

2

Просто пропустите этот аргумент.

boost::function<void(int my_number)> functionWithSavedArgs 
     = boost::bind(&myPrinter, someText); 

Это связывает только первый аргумент.

Если вы хотите, чтобы связать только второй, вам нужно будет заполнители:

boost::function<void(int my_number)> functionWithSavedArgs 
     = boost::bind(&myPrinter, _1, someNumber); 
+0

Я считаю, что первая операция привязки должна также использовать заполнитель, например: повышение :: связать (& myPrinter, SOMETEXT, -1); –

+0

@Gearoid: это работает одинаково. –

+0

Я попытался составить пример частичного связывания без заполнителя и столкнулся с плотными ошибками компилятора –