繁体   English   中英

在boost :: property_tree中的运算符查找

[英]Operator lookup in boost::property_tree

在名称空间中具有自定义类型,在父名称空间中具有streaming-operator,编译器无法在boost::property_tree::ptree::get()操作中找到运算符。 例:

#include <boost/property_tree/ptree.hpp>

namespace NS1 {
    struct Foo { int foo; };
}

template<typename IStream>
IStream& operator>>(IStream& is, NS1::Foo& val) {
    is >> val.foo;
    return is;
}

namespace NS2 {
    void bar() {
        std::stringstream ss;
        auto& is = static_cast<std::istream&>(ss);
        NS1::Foo foo;
        is >> foo;                         // line 1
    }
}

int main() {
    NS2::bar();                            // line 2

    boost::property_tree::ptree tree;
    tree.get_value_optional<NS1::Foo>();   // line 3
}

在该示例中,除非将运算符移入NS1名称空间,否则编译器将找不到该运算符。 但是只有第2行而不是第3行的调用才可以编译! 在第1行之前, bar()函数甚至将流转换为boost使用在失败查找的customize_stream::extract()函数中相同的类型。

我的主要问题是:第3行中的调用与第2行中查找失败的调用有何不同?

不,我真的不希望将流运算符移到与该类相同的名称空间中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM