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。