Как добраться до содержимого заполнителя :: _ 1 - PullRequest
1 голос
/ 15 апреля 2010

У меня сейчас есть следующий код:

using boost::bind;

typedef boost::signal<void(EventDataItem&)> EventDataItemSignal;
class EventDataItem
{
...
EventDataItemSignal OnTrigger;
...
}

typedef std::list< shared_ptr<EventDataItem> > DataItemList;
typedef std::list<boost::signals::connection>  ConnectionList;

class MyClass
{

void OnStart()
{
     DataItemList dilItems;
     ConnectionList clConns;

     DataItemList::iterator iterDataItems;
     for(iterDataItems = dilItems.begin();
         iterDataItems != dilItems.end();
         iterDataItems++)
     {
         // Create Connections from Triggers
         clConns.push_back((*iterDataItems)->OnTrigger.connect(
                               bind(&MyClass::OnEventTrigger, this)));
     }
}

void OnEventTrigger()
{
    // ... Do stuff on Trigger...
}
}

Я бы хотел изменить MyClass :: OnStart для использования std :: transform для достижения того же:

void MyClass::OnStart()
{
     DataItemList dilItems;
     ConnectionList clConns;

     // Resize connection list to match number of data items
     clConns.resize(dilItems.size());
     // Build connection list from Items
     // note: errors on the placeholder _1->OnTrigger
     std::transform(dilItems.begin(), dilItems.end(), 
                    clConns.begin(),
                    bind(&EventDataItemSignal::connect, _1->OnTrigger, 
                             bind(&MyClass::OnEventTrigger, this)));
}

Однако мой сбой - это _1-> OnTrigger. Как я могу ссылаться на OnTrigger из заполнителя _1?

1 Ответ

3 голосов
/ 16 апреля 2010

Вы можете решить эту проблему так же, как и Доступ к переменным-членам через лямбда-указатель boost : заменить _1->OnTrigger на bind(&EventDataItem::OnTrigger, _1).

...