1

我使用 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.

但是,当我传递一个删除了的函数对象并且 ArgumentPack 包含对该值的引用boost::ref时。reference_wrapper<T>T

问题:有没有办法防止reference_wrapper<T>包装被移除?

例子:

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

将在构造函数中SomeFunctionObject& s传递给而不是。这样一来,就会被哪个抄袭,这是不可取的。mWindowFunClassAImplconst reference_wrapper<SomeFunctionObject>&sboost::function

4

1 回答 1

1

目前这似乎是不可能的,因为 Boost Parameter 显式地展开了reference_wrappers。

这对于允许通过引用传递位置参数是必要的。

于 2011-11-24T09:07:02.227 回答