2

这是我想做的。我想存储来自 Http 响应、标头和数据的数据。我想一个简单的方法就是将响应和数据存储为一对。数据是从 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();

我在这里做错了什么?

4

3 回答 3

1

second是一个成员值,而不是标准中定义的函数

20.3.2 类模板对

命名空间标准 {
模板
结构对 {
typedef T1 first_type;
typedef T2 second_type;
T1优先;
T2秒;

second因此不正确使用第二个成员值second()。除非它是您要使用的仿函数,否则您的情况不是这样。

于 2013-04-25T09:02:50.203 回答
1
cout << ((string*)tmp.second()).c_str(); 
                ^^

您正在投射到string*. 它应该只是string(或根本没有),因为secondofpair<HTTPResponse,string>只是一个string.

第二个是一个公正的成员而不是一个成员函数,所以它应该是tmp.second


cout << tmp.second.c_str(); 
于 2013-04-25T09:04:22.233 回答
0

要访问一对元素,您需要:

pair_object.first
// or
pair_object.second

这些是普通的成员变量,而不是访问器函数。请参阅http://en.cppreference.com/w/cpp/utility/pair

于 2013-04-25T09:02:49.060 回答