다음 예제 고려 :boost :: 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;
}
나는 높일 새로운 그리고 난 속성 트리에 푸 개체를 넣어 기꺼이.
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