考虑下面的例子:什么是正确的方法来把对象提升:: property_tree?
#include <boost\property_tree\ptree.hpp>
#include <boost/any.hpp>
typedef boost::property_tree::ptree PT;
struct Foo
{
int bar;
int egg;
Foo(): bar(), egg() {}
};
int main()
{
Foo foo;
foo.bar = 5;
PT pt;
pt.put<Foo>("foo", foo);
return 0;
}
我是新来振奋,我很愿意把Foo对象为属性树。上面的例子不能编译,给了一个错误:
c:\mingw\bin\../lib/gcc/mingw32/4.5.2/../../../../include/boost/property_tree/stream_translator.hpp:33:13: error: no match for 'operator<<' in 's << e'
任何人都可以提出这样做的正确方法?
那么,如果你有一个运算符<<用std :: ostream重载了这个对象的其他目的,你应该怎么做呢?就像如果你在'property_tree'中存储的格式应该看起来不同于你用来显示它的目的? –
@NicolBolas:我还有另外一个选择吗?我没有看到你可以为std :: ostream重载'operator <<'两次,一次针对'boost :: property_tree'中的特定实例,另一个针对'std :: cout'等。我唯一能想到的是调查是否存在'boost :: property_tree'用于I/O的某种类型的派生类,您可以使用它来创建'operator <<'的更具体的重载。否则,你可能会将'std :: cout'包装到另一个类中,并为''Foo'类和'std :: cout'包装器重载'operator <<'。任何其他选项? – Jason