我有一个类,其中构造函数将参数作为引用。例如。
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) { }
还有其他通过引用传递对象的方法吗?
软体限制为Boost 1.4.3(VS2010)。
编辑:该类不可复制构造,也不可分配。我没有在上述示例类中证明这一点。
最佳答案
像这样:
#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
,该模型将引用建模为值。