如果一个类有一个函数调用操作符,它返回对容器的引用(严重编辑):
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
?
答案 0 :(得分:5)
你这样做
client->operator()().push(m.begin(), m.end());
你需要实际调用操作符,因为你有一个指针。或者,改为取消引用唯一指针:
(*client)().push(m.begin(), m.end());