传递参数时如何使用boost :: ref和Boost.Parameter库?

时间:2011-11-10 14:49:08

标签: c++ boost boost-parameter boost-ref

我使用Boost.Parameter库为命名参数提供构造函数。

BOOST_PARAMETER_NAME(windowFunction)

namespace detail
{

struct ClassAImpl
{
    template <class ArgumentPack>
    ClassAImpl(ArgumentPack const& args)
        : mWindowFun(args[_windowFunction])
            , [...]
    {

    }

    boost::function<bool(int, int)> mWindowFun;
    [...]
};
}

struct ClassA : detail::ClassAImpl
{
    BOOST_PARAMETER_CONSTRUCTOR(
            ClassA, (detail::ClassAImpl), tag
          , (optional (windowFunction,*)
            [...]))
};

windowFunction对象通常会复制boost::function,但我也希望能够通过boost::ref引用传递。{/ p>

但是,当我使用boost::ref传递函数对象时,reference_wrapper<T>被删除,而ArgumentPack包含对T值的引用。

问题:有没有办法阻止删除reference_wrapper<T>包装器?

示例:

SomeFunctionObject s;
ClassA a(windowFunction = boost::ref(s));

SomeFunctionObject& s传递给mWindowFun的构造函数中的ClassAImpl,而不是const reference_wrapper<SomeFunctionObject>&。因此,s将被boost::function复制,这是不受欢迎的。

1 个答案:

答案 0 :(得分:1)

这似乎是不可能的,因为Boost参数明确展开reference_wrapper s。

这是允许通过引用传递位置参数所必需的。