打印JSAPIWeakPtr的值

Print value of a JSAPIWeakPtr

本文关键字:的值 JSAPIWeakPtr 打印      更新时间:2023-10-16

我尝试使用以下代码打印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的值?

首先要实现的是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