这是我想要做的。我想存储来自Http响应,标题和数据的de数据。我认为一种简单的方法是将响应和数据存储成一对。数据从LRU缓存中获取。 LRU缓存采用密钥(字符串)和对。 HTTPResponse采用POCO C ++ HTTPResponse对象的形式。但我无法从该对的第二个参数中得到字符串!
this->clientCache = new LRUPersistentCache<string, pair<HTTPResponse, string > >(3,cachePath);
pair<HTTPResponse,string> tmp = (*this->clientCache->get(headKey));// Get the pair
cout << ((string*)tmp.second()).c_str(); //Should get the second object of the pair!
// But gives: Type std::basic_string<char> does not provide a call operator.
像下面这样写出同样的错误:
cout << (*this->clientCache->get(headKey)).second().c_str();
我在这里做错了什么?
答案 0 :(得分:1)
second
是一个memeber值,不是标准中定义的函数
namespace std {
模板
结构对{
typedef T1 first_type;
typedef T2 second_type;
首先是T1;
T2秒;
因此,第二个成员值的正确用法是second
而不是second()
。除非它是你要使用的仿函数,否则不是你的情况。
答案 1 :(得分:1)
cout << ((string*)tmp.second()).c_str();
^^
你正在施放到string*
。它应该只是string
(或根本没有),因为second
的{{1}}只是pair<HTTPResponse,string>
。
,第二个是正义成员而不是成员函数,所以它应该是string
tmp.second
答案 2 :(得分:0)
要访问货币对的元素,您需要:
pair_object.first
// or
pair_object.second
这些是普通成员变量,而不是访问者函数。见http://en.cppreference.com/w/cpp/utility/pair