2009-05-29 3 views
2

간단하지만 미묘한 질문이 있습니다. 아래에서는 DLL 헤더 파일에서 같은 클래스의 두 가지 선언 변종을 볼 수 있습니다.두 DLL 선언의 차이점

누구나이 클래스 선언의 차이점을 말할 수 있습니까?

class __declspec(dllexport) Car { 
public: 
    Car(); 
    void drive(void); 
    typedef enum { None, Indented } Formatting; 
} 

? 후자의 경우, 각 클래스 엘리먼트가 개별적 그래서 선언되는 반면 제 선언

class Car { 
public: 
    __declspec(dllexport) Car(); 
    __declspec(dllexport) void drive(void); 
    __declspec(dllexport) typedef enum { None, Indented } Formatting; 
} 

그 자체가 클래스는 __declspec (dllexport)을 얻는다.

다른가 공통점이 있습니까?

답변

4

depends을 사용한 간략한 테스트는 첫 번째 예제가 두 번째 기호와 비교하여 하나의 추가 기호를 내보내는 것으로 나타났습니다 (열거 형을 내 보내지 않아도 합법적이지는 않습니다.). 내가 틀렸어도 기본 할당 연산자라고 생각합니다.

첫 번째 방법은 전체 클래스를 내보내고, 두 번째 방법은 declspec 접두사가 붙은 메서드 만 사용합니다 (놀랍지도 않습니다).

그래서 나는 클래스를 내보내는 올바른 방법이 분명히 첫 번째 것이고, 개인적으로 두 번째 접근 방법을 사용하여 내 보낸 클래스를 보지 못했다고 말하고 싶습니다.

+0

우리는 두 번째 접근법을 한 번 사용해야했습니다. 이유는, 내 보낸 클래스가 템플릿 클래스에서 파생되었는데 실패했습니다 (VC 2005) –

+0

답변을 주셔서 감사합니다. – Necip

1

클래스 내보내기는 모든 공용 함수를 내보내는 것에 속합니다.

따라서 Formatting enum의 __declspec은 무의미합니다.

때로는 제한된 클래스 기능 집합 만 내보내는 것이 더 적절합니다. 후자의 형태가 선호된다. 귀하의 경우에는 '자동으로 생성 된 소멸자는 내보낼 수 없습니다.