저는이 것들을 꽤 오래 동안 보았습니다.하지만 그들은 매우 무거운 경향이 있습니다. 그들은 당신이 상속을 사용하거나 이상한 생성자를 갖는 것을 막을 수도 있습니다. 결국 그들은 편리함 대신에 너무 많은 부담이되었습니다.
지금 사용하는 멤버를 노출하는이 방법은 매우 가볍기 때문에 직렬화를위한 클래스를 탐색하거나 "x"라는 모든 필드를 0으로 설정할 수 있습니다. 정적으로 결정되므로 매우 빠릅니다. 빌드 과정을 망칠 염려가없는 라이브러리 코드 나 코드 -gen의 레이어가 없습니다. 중첩 된 유형의 계층 구조로 일반화됩니다.
일부 작업을 자동화하기 위해 매크로를 사용하여 편집기를 설정하십시오.
struct point
{
int x;
int y;
// add this to your classes
template <typename Visitor>
void visit(Visitor v)
{
v->visit(x, "x");
v->visit(y, "y");
}
};
/** Outputs any type to standard output in key=value format */
struct stdout_visitor
{
template <typename T>
void visit(const T& rhs)
{
rhs.visit(this);
}
template <typename Scalar>
void visit (const Scalar& s, const char* name)
{
std::cout << name << " = " << s << " ";
}
}
XRTTI에는 최신 Linux 배포판에 대한 업데이트 된 버전이 있습니다. OpenC++는 너무 오래된 것 같습니다. – minghua