临时boost :: bind里面的另一个boost :: bind不能编译

时间:2014-09-18 13:29:24

标签: c++ boost

我喜欢你对这个问题的看法,发生了什么?

考虑这段代码:

void DilateLine(LightMap& lmap, LightMap& copy, int y, boost::function<bool(int, int)> const& applicationPredicate)
{ /*...*/ }

boost::function<bool(int, int)> predicate = boost::bind(&LightMap::IsOverPaddingSpace, lmap, _1, _2);
Executor e(params, boost::bind(DilateLine, boost::ref(lmap), boost::ref(copy), _1, boost::ref(predicate)));

这个编译很好 但是,这不是:

Executor e(params, boost::bind(DilateLine, boost::ref(lmap), boost::ref(copy), _1, boost::bind(&LightMap::IsOverPaddingSpace, lmap, _1, _2)));
  

1&gt; C:\ local \ boost_1_56_0 \ boost / bind / bind.hpp(457):错误C2664:&#39; void   (LightMap&amp;,LightMap&amp;,int,const boost :: function&amp;)&#39; :   无法从&#39; bool&#39;转换参数4 to&#39; const boost :: function&amp;&#39;

over boost code:

template<class F, class A> void operator()(type<void>, F & f, A & a, int)
{
    unwrapper<F>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_]);
}

如果我遵循从这里引用的&#34;&#34;我到达&#34下提到的代码行;这不是&#34;。

这没有任何改变,我删除了Dilate函数中boost :: function中的const& 为什么你认为,这两种形式中的一种不能编译?当它们实际上是等价的时,我只是创建一个名为rvalue而不是临时来修复构建。

0 个答案:

没有答案