2011-04-20 3 views
0

안녕하세요, 일부 temaplate (예를 들어 XML)에서 C++로 메시지 클래스를 자동 생성하는 라이브러리가 필요합니다. 구글 버퍼와 비슷한 것. 그러나 Google 버퍼는 상속 및 "무료"필드를 지원하지 않습니다. 직렬화에 사용할 필요가없는 것은 템플릿 부분에서 자동 생성하는 것입니다. 어떤 아이디어?C++ Messages 클래스 생성

답변

1

"소스"가 XML 인 경우 XSLT가 분명한 선택 인 것처럼 보입니다.

+0

XSLT는 가장 일반적인 접근 방식 일 수 있지만 매우 복잡한 구문입니다. Google 버퍼 정의의 단순함은 매우 매력적입니다. – Boris

0

적어도 두 가지 문제가있는 것처럼 보입니다 : XML을 읽고 플라이에서 인스턴스를 생성하십시오. 다른 사람들이 말하듯이 XML을 파싱하기 위해 라이브러리를 사용하십시오. 웹에서 "Factory design pattern c++"을 검색하십시오.

공통 기본 클래스가있는 경우 팩토리는 (동적 메모리에 할당 된) 하위 객체의 인스턴스를 반환합니다. 그렇지 않으면 팩토리가 다른 객체를 반환하는 함수 컬렉션이됩니다.

팩토리 구현의 한 가지 형식은 메서드를 만들 수없는 경우 인스턴스 포인터 또는 NULL을 반환하고 메서드 포인터를 반환하는 메서드를 만드는 것입니다. 이런 식으로 :

class Animal; 
class Cat: public Animal; 
class Dog: public Animal; 
class Elephant: public Animal; 

Animal * Create_Cat(const std::string& animal_name); 
Animal * Create_Dog(const std::string& animal_name); 
Animal * Create_Elephant(const std::string& animal_name); 

Animal * Animal_Factory(const std::string& animal_name) 
{ 
    Animal * p_animal = NULL; 
    do 
    { 
     p_animal = Create_Cat(animal_name); 
     if (p_animal) 
     { 
      break; 
     } 
     p_animal = Create_Dog(animal_name); 
     if (p_animal) 
     { 
      break; 
     } 
     p_animal = Create_Elephant(animal_name); 
     if (p_animal) 
     { 
      break; 
     } 
    } while (false); 
    return p_animal; 
}