1
我使用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
通過。
但是,當我傳遞一個函數對象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
複製,這是不希望的。