문제

제목에서 알 수 있듯이 C ++ 클래스 내에서 정적 데이터를 가져 오거나 내보내는 것이 정확합니까?

나는 내 문제를 발견했다 - 내가보고 있던 클래스의 저자는이 플랫폼에서 지원되지 않는 쓰기 가능한 정적 데이터를 내보내려고하는 것이었다.

그러나 답변 해 주셔서 감사합니다.

도움이 되었습니까?

해결책

그것이 작동하고 기대하는 일을하는 것처럼 맞습니까? 클래스 또는 클래스 멤버에서 _declSpec (dllexport/dllimport)를 사용하는 것에 대해 이야기하고 있다고 가정하면, 예, 예상 결과를 제공해야합니다. 정적 데이터는 DLL 외부에서 액세스 할 수 있고 다른 C ++ 코드가 액세스 할 수 있습니다. C ++ 액세스 사양 (공개/보호/개인)은 처음부터 외부 액세스를 차단하지 않을 것이라고 제안했습니다.

좋은 생각인가요? 개인적으로 나는 당신이 당신의 도서관 내에서뿐만 아니라 외부 세계에 수업 내부를 노출시킬 것이라고 생각하지 않습니다. 즉, 하루가 끝날 때 구현 세부 사항을 변경하는 것은 거의 불가능할 것임을 의미합니다. 이 클래스의 인터페이스와 구현의 많은 부분이 절대 변하지 않을지 100% 확신하는지 스스로에게 물어보십시오 ...

다른 팁

내보낸 C ++ 클래스는 DLL 클라이언트가 이름 관리 및 기타 문제로 인해 DLL과 동일한 컴파일러를 사용해야 함을 의미합니다. 이것은 실제로 매우 큰 문제입니다. 클라이언트 프로그램이 MSVC9로 전환되었고 DLL 자체는 MSVC71을 사용하고 있었기 때문에 한 번 C 래퍼를 C ++ 클래스에 작성해야했습니다. [DLL을 MSVC90으로 전환하는 데 다른 합병증이 있었다]. 그 이후로 나는 수업 수출 사업에 대해 회의적이었고 모든 것에 대한 C 래퍼를 작성하는 것을 선호합니다.

이제 수출 클래스의 가격을 기꺼이 지불하려는 경우 정적 데이터 수출이 문제를 악화 시키지는 않습니다. 아마도, 당신이 수출 할 수있는 것들 중에서, 정적 상수를 수출하는 것이 가장 안전합니다. 그럼에도 불구하고 Timo가 말했듯이, 당신은 이제이 구현에 잠겨 있기 때문에 그렇게하지 않을 것입니다.

내가 작업 한 프레임 워크 중 하나는 클라이언트가 일련의 오류 코드 상수를 제공해야했습니다. 시간이 지남에 따라, 우리는 단순한 상수를 사용하는 것이 너무 부서지기 때문에 OO 디자인으로 전환했습니다. 공통 오류 코드를 반환하는 기본 구현이 있었지만 개별 클라이언트가 재정의 할 수있는 가상 함수를 사용하여 각 오류 코드에 액세스했으며 일부 고급 장치 특정 오류 처리에서 사용했습니다. 이 솔루션이 증명되었습니다 멀리 상수를 내보내는 것을 기반으로 한 것보다 확장 가능합니다.

정적 변수를 내보내기 전에 구성 요소가 어떻게 진화 할 것으로 기대하는지에 대해 길고 열심히 생각하는 것이 좋습니다.

클래스의 (정적이 아닌) 데이터 구성원의 dllexport (또는 가져 오기)는 아무것도하지 않습니다. 내보낸 "사물"은 기능 또는 글로벌 데이터입니다 (이것은 의심스러운 디자인 선택이지만). 클래스의 dllexport는 "이러한 모든 기능을 내보내는"이라고 말하는 바로 가기입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top