考慮下面的例子:什麼是正確的方法來把對象提升:: 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