boost::variant<std::string, int> myVariant;
이 개체에서 데이터베이스의 데이터를 유지합니다. 일반적으로 정수 또는 텍스트이지만 때로는 데이터베이스에 텍스트로 저장된 시간입니다. 그래서 방문자를 만들 수 있는지 궁금합니다. 변형 된 객체를 문자열로 방문하면 'tm'유형의 구조체가 반환됩니다. 뭔가 그런 :
class timeVisitor : public boost::static_visitor<boost::shared_ptr<tm> >
{
public:
boost::shared_ptr<tm> operator()(string &str) const
{
boost::shared_ptr<tm> dst(new tm());
strptime(str.c_str(), "%Y-%m-%d", dst.get());
return dst;
}
};
그럼 그것을 사용하려면 :
사실, 그 방문자에 tm 구조체를 만들고 일부 공유 포인터와 엉망 싶지 않다 그리고 물건. 나는 방문자와 내부에 이미 생성 된 것을 초기화하는 것을 선호한다. 뭔가를 (사용의 의미에서) :
tm result;
int returnCode = boost::apply_visitor(timeVisitor(result), myVariant);
방문자가 strptime 내 결과 tm 구조체로 초기화됩니다 및 심지어 returnCode로 변환하는 데 문제가 있으면 반환합니다. 누구나 달성 할 수있는 방법을 알고 있습니까? 방문자에게 두 개의 매개 변수를 사용하는 방법을 정의 할 수 있습니까? 아니면 다른 무엇인가를 정의 할 수 있습니까?
예! 저것은 완벽하게 작동했습니다 ... 저는 약간의 푸시가 필요하다는 것을 알았지 만, 그러한 라이브러리는 때로는 조금 혼란 스럽습니다. 내가 몰랐던 것은 boost :: variant을 가졌기 때문에 매개 변수로 int를 취하는 operator()를 정의해야한다는 것입니다. 그리고 오류 메시지에서 알기가 쉽지 않습니다. ( –
pinpinokio