2011-10-20 36 views
8

Tôi đang cố gắng để hiểu một số mã C++ trong đó có cú pháp lớp sau đây:Điều gì có nghĩa là khi khai báo lớp học có hai tên?

class Q_MONKEY_EXPORT BasePlugin : public QObject 
{ 
    // some code comes here 
}; 

Tôi không thể hiểu được cú pháp class Q_MONKEY_EXPORT BasePlugin. Đối với tôi, có vẻ như có hai tên cho lớp. Cú pháp kiểu này có ý nghĩa gì trong C++?

+0

Bản sao (ở một mức độ nào đó) của http://stackoverflow.com/questions/3148571/strange-class-declaration? –

+0

@LokiAstari tại sao nó ngớ ngẩn để xác định các biểu tượng để xuất khẩu và không? –

+0

@Omri Barel cảm ơn vì đã chỉ cho tôi câu hỏi đó, tìm kiếm của tôi không thành công đó là lý do tôi hỏi. – Amani

Trả lời

6

Q_MONKEY_EXPORT rất có thể là #define ở đâu đó. Xác định như vậy đôi khi được yêu cầu, ví dụ khi lớp nằm trong thư viện và cần được xuất khi tệp tiêu đề được bao gồm từ một nơi khác. Trong trường hợp đó, định nghĩa giải quyết cho một cái gì đó như __declspec(dllexport) (cú pháp chính xác sẽ phụ thuộc vào các công cụ bạn đang sử dụng).

6

Đó có lẽ là chỉ thị tiền xử lý nhất cho trình biên dịch biết biểu tượng sẽ được xuất.

Nó có thể định nghĩa là:

#define Q_MONKEY_EXPORT _declspec(dllexport) 

đó sẽ gây ra lớp học của bạn được xuất khẩu sang dll.

Việc kê khai đầy đủ sẽ được mở rộng, trước khi biên soạn, để:

class _declspec(dllimport) BasePlugin : public QObject 
{ 
    // some code comes here 
}; 

EDIT:

Như David Heffernan chỉ ra, macro như thế này thường được sử dụng để cho trình biên dịch biết liệu nó cần phải nhập khẩu hoặc xuất khẩu các biểu tượng. Thường được định nghĩa là dllimport cho mô-đun bên ngoài và dllexport khi tạo mô-đun. Tôi nghi ngờ đó là trường hợp ở đây, vì tên cho thấy xuất khẩu, nhưng tốt nhất là kiểm tra tài liệu hoặc thực sự đi đến định nghĩa.

2

Q_MONKEY_EXPORT là macro (tất cả trường hợp trên là quy ước cho macro) thường phân giải thành một cái gì đó như __declspec(dllexport) khi bạn xây dựng DLL và giải quyết thành __declspec(dllimport) khi bạn đang sử dụng DLL.

Bạn có thể tìm hiểu chính xác nó là gì bằng cách đọc các tệp bao gồm của bạn.

Các vấn đề liên quan