将原始函数指针传递给重载的运算符|它接受boost :: function<>

时间:2016-02-25 17:11:17

标签: c++ boost

我想重载operator|(),以便我可以使用与linqboost::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<>参数,但是禁止这样的参数转换或者我的代码中存在错误。

0 个答案:

没有答案