2017-10-02 21 views
2

クラスは、コンテナ(重く編集さ)への参照を返す関数呼び出し演算子を持っている場合:unique_ptrでどのように関数呼び出し演算子を呼び出しますか?

class client_connection { 
public: 
    concurrent_queue<T>& operator()() { return client; } 
    concurrent_queue<T> client; 
}; 

そして​​のメンバーを持っている別のクラス:

class remote { 
public: 
    void get_version() { 
     auto d = ... something to generate data ... 
     client().push(d.begin(), d.end()); 
    } 
... 
client_connection client; 
}; 

client場合、これは動作しますremoteオブジェクトの一部として構築されます。しかし、所有者をremoteunique_ptr経由で渡すと、どのように関数呼び出し演算子を呼び出しますか? client()->push(d.begin(), d.end());に結果のエラーメッセージを呼び出しを変更する際に

はプッシュunique_ptr、ない​​上にあるため、問題があることを示唆しています。 .get()を使用して

は今、基礎となるオブジェクトではなく、関数呼び出し演算子なしで働いている:client.get()->push(m.begin(), m.end()); // error: ‘class client_connection<unsigned char>’ has no member named ‘push’

しかし、すべてが失敗関数呼び出し演算子を呼び出すために様々な組み合わせをしようとしています。 unique_ptrに含まれるオブジェクトの関数呼び出し演算子をどのように呼び出すのですか?

+1

[mcve]を入力してください。 – Barry

+2

一般的には、unique_ptr-> operator()(args ...)を使う必要があります。 – OutOfBound

+0

@Barry私は何かを呼び出す方法を尋ねるときに完全な例を提供することができますか?無関係なクラスの画面でも、読者は問題がどこにあるかを調べることになります。 –

答えて

5

あなたはあなたがポインタを持っているので、実際にオペレーターを呼び出す必要があり、この

client->operator()().push(m.begin(), m.end()); 

のようにそれを行います。代わりに、ユニークなポインタを逆参照してください。

(*client)().push(m.begin(), m.end()); 
関連する問題