lundi 2 octobre 2017

How do you call the function call operator on a unique_ptr?

If a class has a function call operator that returns a reference to a container (heavily redacted):

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

And another class which has a member of client_connection:

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

This works if client is constructed as part of the remote object. However if you pass ownership to remote via a unique_ptr how do you call the function call operator?

Upon changing the call to client()->push(d.begin(), d.end()); the resulting error message suggests that the issue is because the push is on the unique_ptr, not the client_connection.

Using .get() is now working on the underlying object but without function call operator: client.get()->push(m.begin(), m.end()); // error: ‘class client_connection<unsigned char>’ has no member named ‘push’

However trying various combinations to invoke the function call operator all fail. How do you call the function call operator on an object contained in a unique_ptr?

Aucun commentaire:

Enregistrer un commentaire