2017-10-02 4 views
2

클래스는 (주로 편집 됨) 컨테이너에 대한 참조를 반환하는 함수 호출 연산자가있는 경우 :unique_ptr에서 함수 호출 연산자를 어떻게 호출합니까?

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

client을 경우 작동합니다 client_connection의 멤버가

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

그리고 다른 클래스를 remote 개체의 일부로 구성됩니다. 그러나 소유권을 remoteunique_ptr 통해 전달하는 경우 어떻게 함수 호출 연산자를 호출합니까?

client()->push(d.begin(), d.end());으로 호출을 변경하면 푸시가 client_connection이 아닌 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

@ Bryry 어떻게 전화를해야 하는지를 묻는 방법을 보여줄 수 있습니까? 관련이없는 클래스의 스크린은 독자가 문제가있는 곳을 찾아 내려고합니다. –

답변

5

당신은 당신이 포인터를 가지고 있기 때문에 실제로 연산자를 호출 할 필요가이

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

처럼 않습니다. 또는 고유 포인터의 참조를 취소하십시오.

(*client)().push(m.begin(), m.end()); 
관련 문제