我使用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
复制,这是不受欢迎的。
答案 0 :(得分:1)
这似乎是不可能的,因为Boost参数明确展开reference_wrapper
s。
这是允许通过引用传递位置参数所必需的。