0

我尝试std::map<int, FB::JSAPIWeakPtr> apiMap;使用代码打印 a 的所有元素:

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吗?

4

1 回答 1

0

首先要意识到 FB::JSAPIWeakPtr 只是 boost::weak_ptr 的 typedef

这有点取决于您要实际完成的工作;如果你只是想弄清楚它是否仍然有价值,我会做这样的事情:

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

于 2014-10-08T17:57:53.520 回答