没有在boost :: in_place_factory中展开boost :: reference_wrapper

时间:2017-06-01 09:17:30

标签: c++ boost pass-by-reference

以下内容给出了编译错误(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;
}

http://ideone.com/NjHsha

有没有办法解决这个问题,而不会在boost::reference_wrapper中引入S的依赖关系,理想情况下根本不会触及S

0 个答案:

没有答案