我使用 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
传递给而不是。这样一来,就会被哪个抄袭,这是不可取的。mWindowFun
ClassAImpl
const reference_wrapper<SomeFunctionObject>&
s
boost::function