【问题标题】:How to get at contents of placeholder::_1如何获取占位符的内容::_1
【发布时间】:2010-04-15 19:28:02
【问题描述】:

我目前有以下代码:

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。 如何从占位符 _1 引用 OnTrigger?

【问题讨论】:

标签: c++ boost bind placeholder


【解决方案1】:

你可以像Accessing member variables through boost lambda placeholder一样解决它:将_1-&gt;OnTrigger替换为bind(&amp;EventDataItem::OnTrigger, _1)

【讨论】:

  • 试过这个,编译器返回错误:error: no matching function for call to 'bind(, ...)
  • @sheepsimulator,你能复制粘贴整个编译器输出吗?
  • @sheepsimulator,原始帖子中的代码正是您正在编译的吗?因为我认为您可能想用&amp;MyClass::OnEventTrigger 替换&amp;MyClass::Stuff
  • @MSN - 不,代码不是我正在编译的,你说得对,::Stuff 应该是::OnEventTrigger。通过我的 OP 中的编辑修复。
  • @sheepsimulator,没有完整的编译器输出,很难确定它失败的地方。
猜你喜欢
  • 1970-01-01
  • 2015-09-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-31
  • 1970-01-01
  • 1970-01-01
  • 2023-04-04
相关资源
最近更新 更多