2011-09-07 7 views
0

스칼라를 bool로 구문 분석하려고합니다.연산자를 오버로드하는 방법 >> bool

YAML::operator>><bool> (node=..., [email protected]) at /usr/include/yaml-cpp/nodeimpl.h:24 

그리고 난 안 '예'또는 '아니오'에 문자열이 'YAML :: InvalidScalar'를 얻을 :

#include <yaml.h> 
#include <iostream> 
#include <sstream> 
#include <string> 

void operator>> (const YAML::Node & node, bool & b) 
{ 
    std::string tmp; 
    node >> tmp; 
    std::cout << tmp << std::endl; 
    b = (tmp == "1") || (tmp == "yes"); 
} 

int main() 
{ 
    bool b1, b2; 
    std::stringstream ss("key: да\notherkey: no"); 
    YAML::Parser parser(ss); 
    YAML::Node doc; 
    parser.GetNextDocument(doc); 

    doc["key"] >> b1; 
    doc["otherkey"] >> b2; 

    std::cout << b1 << std::endl; 
    std::cout << b2 << std::endl; 

    return 0; 
} 

그러나 더 복잡한 경우 템플릿 연산자

가 사용됩니다 이 예제는 작동합니다.

+0

와우. 내가 네임 스페이스 YAML {}에 오버로드 된 연산자를 둘러 쌌습니다. 그리고 지금 그것은 작동합니다 ... – Igor

답변

0

yaml-cpp는 YAML 명세에 지정된대로 기본적으로 bool을 읽습니다. 오프

Y, 예, 사실

true 생산에, 그리고

N, 아니, 거짓, false을 생산하고 있습니다. 이 동작을 확장하거나 변경하려면 (예 : "да"도 true을 생성하도록) 알았 듯이 YAML 네임 스페이스의 operator >>이 오버로드됩니다.

YAML 네임 스페이스에 있어야하는 이유 (전용 "더 복잡한 예"를 -하지만 당신이 직접 bool 인수 operator >>를 호출하지 않는 경우 의미) 방식 C++ 조회 작품이다.

큰 설명은 this answer에서 my old question을 참조하십시오.

+0

감사. 나는 단지 현지화 된 버전을 원한다. 지. "да"in 러시아어 – Igor

관련 문제