我喜欢你对这个问题的看法,发生了什么?
考虑这段代码:
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而不是临时来修复构建。