Как добраться до содержимого заполнителя::_1
В настоящее время у меня есть следующий код:
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 ответ
Вы можете решить это так же, как Доступ к переменным-членам через лямбда-указатель boost: replace _1->OnTrigger
с bind(&EventDataItem::OnTrigger, _1)
,