2010-04-15 3 views
3

저는 C++에 비교적 익숙하며 자바로되어 있습니다. Java에서 C++로 일부 코드를 이식해야하고 Object Java 클래스와 관련하여 의문이 제기됩니다. 나는 포트에이 싶다면, :자바 객체 클래스에서 C++로

void setInputParameter(String name, Object object) { ..... } 

을 나는 잘 무효 * 유형 또는 템플릿을 사용한다고 생각? 나는 그것을 달성하기위한 "표준"절차가 무엇인지 모른다.

감사

+2

@ 루이 - 질문은 명확하지 않습니다. Java에서 C++로 포팅하고 싶습니다. 하지만 C++ 코드를 제공했습니다. 당신이 이식하려고하는 자바에서 그게 뭐지? 빠른 답변을 얻을 수 있도록 질문을 수정하십시오. –

+0

또한 C++에는 루트 Object 클래스가 없습니다. Java 코드를 C++로 포팅하는 것은 그리 쉬운 일이 아닙니다. –

+0

죄송합니다, 실수. 편집 됨) – dmessf

답변

2

그것은 당신이 object 수행 할 작업을 따라 달라집니다.

템플릿을 사용하는 경우 object에서 호출하는 모든 메서드는 컴파일시 object 형식으로 바인딩됩니다. 이것은 유형 안전하고 바람직합니다. 오브젝트의 유효하지 않은 사용은 컴파일러 오류로 표시됩니다.

무엇이되어야하는지 알 수있는 방법이 있다고 가정하면 void *을 전달하여 원하는 유형으로 캐스팅 할 수도 있습니다. 이것은 위험하고 코드의 버그에 더 취약합니다. dynamic_cast<>을 사용하여 런타임 유형 검사를 활성화하면 좀 더 안전하게 만들 수 있습니다.

1

임의의 개체에 대한 포인터를 허용하려면 해당 형식을 void *으로 지정합니다. 그러나 그것은 함수의 끝이 될 것이므로 void * 값을 저장하거나 알려진 객체에 대한 포인터로 캐스트하는 것을 제외하면 아무 것도 할 수 없습니다. 어쨌든 그것을 캐스팅하려는 경우 객체가 무엇인지 알 수 있으므로 void *은 필요하지 않습니다.

C++에는 Java와 동일한 종류의 인트로 스펙 션 기능이 없습니다. 즉, myObject.getClass().getName()과 같은 말을하는 편리한 방법이 없습니다. 내가 알고있는 가장 가까운 것은 런타임 유형 정보 (RTTI)입니다. 이것은 here 액션에서 볼 수 있습니다.

또 다른 대안은 자신의 루트 클래스를 만들고 자신의 내부 검사 방법을 작성하는 것입니다 (많은 C++ 프레임 워크가이를 수행합니다).