【问题标题】:Print value of a JSAPIWeakPtr打印 JSAPIWeakPtr 的值
【发布时间】:2014-10-08 15:11:04
【问题描述】:

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

【问题讨论】:

    标签: c++ map firebreath jsapi


    【解决方案1】:

    首先要意识到 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

    【讨论】:

    • 非常感谢您的回复。 cur.get 正是我所需要的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-12-18
    • 1970-01-01
    • 2021-09-27
    • 2014-05-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多