如何在unique_ptr上调用函数调用运算符?

时间:2017-10-02 14:28:28

标签: c++ c++11

如果一个类有一个函数调用操作符,它返回对容器的引用(严重编辑):

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

另一个成员client_connection

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

如果将client构造为remote对象的一部分,则此方法有效。但是,如果您通过remote将所有权传递给unique_ptr,您如何调用函数调用运算符?

将来电更改为client()->push(d.begin(), d.end());后,生成的错误消息表明问题是因为推送位于unique_ptr,而不是client_connection

使用.get()现在正在处理底层对象但没有函数调用运算符:client.get()->push(m.begin(), m.end()); // error: ‘class client_connection<unsigned char>’ has no member named ‘push’

但是尝试各种组合来调用函数调用操作符都会失败。如何在unique_ptr

中包含的对象上调用函数调用运算符

1 个答案:

答案 0 :(得分:5)

你这样做

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

你需要实际调用操作符,因为你有一个指针。或者,改为取消引用唯一指针:

(*client)().push(m.begin(), m.end());