boost :: in_place将参数作为const引用

时间:2013-09-10 23:18:06

标签: c++ boost c++11

我有一个类,构造函数将参数作为参考。例如。

class A
{
    A(Tracer& t) : m_t(t) { }
  private:
     Tracer& m_t;
};

我将此class A作为boost :: optional,并且只在需要时才构建它。如果我使用boost :: in_place来构造它。由于boost::in_place将参数作为const_refs,我必须将构造函数的签名修改为

A(const Tracer& t) : m_t(const_cast<Tracer&>(t)  { }

有没有其他方法通过引用传递对象?

s / w限制是boost 1.4.3,VS2010。

编辑:该类不是可复制构造的,也可以分配。我没有在上面提到的示例类中显示过。

1 个答案:

答案 0 :(得分:2)

像这样:

#include <boost/optional.hpp>
#include <boost/ref.hpp>

struct Tracer
{
    Tracer() = default;

    Tracer(const Tracer&) = delete;
    Tracer(Tracer&&) = delete;
    Tracer& operator=(const Tracer&) = delete;
    Tracer& operator=(Tracer&&) = delete;
};

class A
{
public: // Note: I had to add this.
    A(Tracer& t) : m_t(t) { }
private:
     Tracer& m_t;
};

int main()
{
    Tracer tracer;
    boost::optional<A> x;

    x = boost::in_place(boost::ref(tracer));
}

boost::ref会返回boost::reference_wrapper,它会将引用建模为值。