C++ boost::就地将参数作为常量引用

C++ boost::就地将参数作为常量引用,c++,boost,c++11,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(cons

我有一个类,其中构造函数以参数作为引用。例如

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)  { }
A(const Tracer&t):m_t(const cast(t){}
还有其他方法通过引用传递对象吗

s/w限制为boost 1.4.3,VS2010

EDIT:该类也不是可复制构造和可分配的。在上面提到的示例类中,我没有说明这一点。

如下所示:

#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));
}
#包括
#包括
结构跟踪器
{
Tracer()=默认值;
跟踪器(常量跟踪器&)=删除;
跟踪器(跟踪器&)=删除;
跟踪器和运算符=(常量跟踪器-)=删除;
跟踪器和运算符=(跟踪器和运算符)=删除;
};
甲级
{
public://注意:我不得不补充这一点。
A(Tracer&t):m_t(t){}
私人:
跟踪与监测;
};
int main()
{
示踪剂;
boost::可选的x;
x=boost::in_place(boost::ref(tracer));
}

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

我现在手头没有编译器。但我确实尝试了这个方法,但得到了一个编译错误。可能与其他原因有关。如果你100%确定,那么我将接受这个答案。谢谢。@Jagannath:我更新了这个示例以强调这一点我所做的更改以及
Tracer
的不可复制性。我使用的是g++4.8.1。