我想重载operator|()
,以便我可以使用与linq
或boost::range
类似的方式使用中缀表示法。一些事情:
int foo = 2L | bar;
其中bar是int(*)(long)
免费功能。我知道operator|()
参数不能是原始函数指针,所以我考虑使用boost::function<>
代替(我不能使用std::function<>
出于我无法控制的原因)。
无论如何,我尝试了以下模板化过载:
template<typename _Arg, typename _FnArgs>
inline typename boost::result_of<boost::function<_FnArgs>(_Arg)>::type
operator|(_Arg const & a, boost::function<_FnArgs> fn)
{
return fn(a);
}
如果我将显式boost::function<>
传递给它,但是使用原始函数失败了。我期望原始函数将转换为boost::function<>
参数,但是禁止这样的参数转换或者我的代码中存在错误。