c++ reflection 기능이 필요합니다.

emptynote의 이미지

c++ 에서 reflection 기능이 필요합니다.

out 객체를 만들고 그거 가지고 네트워크 IO를 처리하고자 합니다.
그래서 자바의 경우 toString을 나름 원하는 수준까정 만들게 되었습니다.
1) 번 url를 참고하시면 제가 만든 소스를 보실수있습니다.

1) http://kldp.org/node/120984

2번 url에서는 c++ 에서는 reflection 이 없다고 하네요.
부분 인용 : "But unfortunately C++ doesn't support reflection."

2) http://www.garret.ru/cppreflection/docs/reflect.html

결론적으로 c++ 혹은 GNU g++에서라도

제가 자바로 만든 toString 와 동일하게 만들수있는 방법을 알고싶습니다.

2번에서 소개한 RTTI 가 해결해 줄수있을까요?

일단 RTTI 보는중이지만 그래도 다른 방법

혹은 RTTI 경험을 듣고 싶어서 이글 적어 봅니다.

==========================
2011.02.21 오후 10시 23분 추가

제가 참 많이 전산 지식이 약해서 문제네요.
toString이 필요한것은 Value Object 이네요.
그런데 이것을 Hashtable로 전환을 하면 간단하게 해결이 되는듯하네요.
주석을 달다 보니 ???Out.class를 어떤 한글로 표현하면 좋을까하다가
까막득하게 잊은 VO를 발견했네요.
이게 자바쪽에서는 참 논란이 많은것이지요.
서버는 일단 VO로 하고,
클라이언트는 reflection문제도 있고하니
hashtable로 두가지 방법 모두 사용하는 탕평책???을 쓰겠습니다.

참고 url : http://kldp.org/node/104646

결론적으로 이 Thread close 합니다.

Scarecrow의 이미지

qt를 사용해보세요.

ddoman의 이미지

자바에서는 모든 클래스가 반드시 Object라는 클래스를 상속받게끔 "강제" 되는 것으로 알고있습니다.( 사실 제가 자바프로그래머는 아니라서, 그걸 피해갈수 있는 트릭이 있는지는 모르겠네요. ) toString()은 Object()에 정의가 되어있으므로, 원하지않더라도 자바에 있는 모든 class는 toString() implicitly or explicitly 포함하고 있다고 봐야겠죠.

C++은 그러한 강제사항이 없습니다.
그냥 k9200544님이 만드시는 모든 class는 toString()이라는 함수를 갖게 한다..라는 "본인만의" 규칙을 만들어서
최소한 직접 작성한 클래스들은 toString()을 갖게끔 하시면 됩니다.

설령, 본인이 아닌 다른 사람들이 만든클래스도 toString()을 갖게끔 하고 싶으시다면..wrapper class에서 상속으로
결국은 직접 toString()을 작성해주셔야 합니다.

참고로,
C++ 에서는 typecast operator의 overriding 이 꽤 괜찮은 문법을 만들어줍니다.
가령 operator overriding 잘하면 아무런 컴파일러 에러/경고 다음의 코드가 가능한 class를 만들 수 있습니다.

void print_boolean( bool value )
{
...
}
 
void print_string( const char* str )
{
...
}
 
void print_number( const int value )
{
...
}
 
 
MyBoolean var( true );
print_boolean( var );
print_string( var );
print_number( var );
 
strcmp( var, "true" );

단지 코드상의 좀 더 매끄러운 표현때문에 toString()을 갖었음 하는 것이었다면, operator overriding 만으로도 충분히 매끄러운 코드가 나옵니다.

emptynote의 이미지

우선 답변감사합니다.

toString의 용도는 있으면 편하고 없어도 무방한 디버그용으로

실제 업무랑 전혀 상관없기에,

Out객체를 작성해야 할 담당 프로그래머가 toString() 만들기에 신경을 안쓰고,

온전히 비지니스 로직에만 집중했으면 합니다.

그것은 저 하나만 고생했으면 합니다.

그래서 reflection 기능을 활용한 general 한 toString을 만들고자 하며,

자바는 찾았는데 Gtkmm GUI toolkit을 사용하는 client인 c++ 에서도

그 기능을 구현하기 위해서 찾아가는 중입니다.

만약 (1) 구현 자체가 손쉽지 않거나,
(2) out객체를 만들어야 하는 담당 프로그래머를 구찮게 해야 한다거나,
(3) 불가능하다면 당연히 포기할것입니다.

cedar의 이미지

toString() 기능을 위해서 굳이 C++ Reflection 라이브러리를 쓰실 필요는 없습니다.

님이 원하시는 기능은 boost::serialization 라이브러리를 쓰시면 해결될 것 같네요.
http://www.boost.org/doc/libs/1_45_0/libs/serialization/doc/index.html