2

コンストラクターがパラメーターを参照として受け取るクラスがあります。たとえば。

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)  { }

オブジェクトを参照渡しする他の方法はありますか?

ソフトウェアの制限は、ブースト 1.4.3、VS2010 です。

EDIT : クラスはコピー構築可能ではなく、割り当て可能でもありません。上記のサンプルクラスではそれを示していません。

4

1 に答える 1

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::refboost::reference_wrapper参照を値としてモデル化する を返します。

于 2013-09-10T23:26:55.240 に答える