Вывести значение JSAPIWeakPtr

Я пытаюсь распечатать все элементы std::map<int, FB::JSAPIWeakPtr> apiMap; используя код:

void printMap() {
std::map<int, FB::JSAPIWeakPtr>::iterator p;
p= apiMap.begin();

for(; p!=apiMap.end(); ++p)
{
std::cout << "int is: " << p->first << endl;
std::cout << "FB::JSAPIWeakPtr is: " << p->second << endl;
}
}

но я получаю ошибку ниже:

In function ‘void printMap()’:
error: no match for ‘operator<<’ in ‘std::operator<< [with _Traits = std::char_traits<char>]((* & std::cout),
((const char*)"map is: ")) << p.std::_Rb_tree_iterator<_Tp>::operator-> [with _Tp = std::pair<const int,
boost::weak_ptr<FB::JSAPI> >, std::_Rb_tree_iterator<_Tp>::pointer = std::pair<const int,
boost::weak_ptr<FB::JSAPI> >*]()->std::pair<const int, boost::weak_ptr<FB::JSAPI> >::second’

Есть ли способ напечатать значение, которое FB::JSAPIWeakPtr есть?

0

Решение

Первое, что нужно понять, это то, что FB :: JSAPIWeakPtr — это просто определение типа для boost :: weak_ptr

Это зависит от того, чего вы пытаетесь достичь на самом деле; если вы просто пытаетесь выяснить, имеет ли оно значение, я бы сделал что-то вроде этого:

for(; p!=apiMap.end(); ++p)
{
std::cout << "int is: " << p->first << endl;
FB::JSAPIPtr cur(p->second.lock());
if (cur) { std::cout << "FB::JSAPIWeakPtr is valid" << endl; }
else { "FB::JSAPIWeakPtr is invalid" << endl; }
}

Если вы действительно хотите распечатать значение, вы можете использовать cur.get() чтобы получить фактическое значение указателя. Главное, что нужно помнить, это то, что weak_ptr не имеет действительного значения, оно имеет значение только в том случае, если вы можете успешно заблокировать его (что удерживает его от освобождения при доступе к нему).

Еще одна вещь, на которую стоит обратить внимание, — это то, что при разработке плагинов довольно редко можно написать std :: cout; Вы можете прочитать о FireBreath Logging

0

Другие решения


По вопросам рекламы [email protected]