以下内容给出了编译错误(const boost::reference_wrapper<R>
没有名为foo
的成员)。我希望boost::in_place_factory
能够自动解包boost::reference_wrapper
。实际上,我必须向我自己的类S
添加解包代码以支持此用例。
当然这只会发生,因为模板参数T
能够绑定到const boost::reference_wrapper<R>
。使用“普通”非模板构造函数S(R&)
,它可以正常工作。
#include <boost/optional.hpp>
#include <boost/ref.hpp>
#include <boost/utility/in_place_factory.hpp>
struct S
{
template<typename T> S(T &t)
{
t.foo();
}
};
struct R
{
void foo(){}
};
int main() {
boost::optional<S> s;
R r;
s = boost::in_place(boost::ref(r));
return 0;
}
有没有办法解决这个问题,而不会在boost::reference_wrapper
中引入S
的依赖关系,理想情况下根本不会触及S
?