Nếu bạn có thể, thích đưa các phương pháp cụ thể nền tảng thành đơn vị dịch riêng biệt. Điều này sẽ cho phép mã hơn & dễ đọc hơn và dễ dàng hơn để phát triển và duy trì. IMHO, quá trình xây dựng nên xác định mô-đun cụ thể nền tảng nào để kết hợp.
Ví dụ:
rectangle.hpp:
struct Rectangle
{
void draw(int upper_left_corner_x, int upper_left_corner_y,
unsigned int length, unsigned int width);
}
Bây giờ nền tảng file cụ thể:
rectangle_wx_widgets.cpp:
#include "rectangle.hpp"
void
Rectangle ::
draw(int upper_left_corner_x, int upper_left_corner_y,
unsigned int length, unsigned int width)
{
// wxWidgets specific code here.
}
rectangle_qt.cpp:
#include "rectangle.hpp"
void
Rectangle ::
draw(int upper_left_corner_x, int upper_left_corner_y,
unsigned int length, unsigned int width)
{
// QT specific code here.
}
main.cpp:
#include "rectangl.hpp"
int main(void)
{
Rectangle r;
r.draw(50, 50, 10, 5);
return 0;
}
Đoạn mã trên không có chỉ thị tiền xử lý có điều kiện. Hàm main
vẽ hình chữ nhật bất kể nền tảng. Các chi tiết cụ thể của nền tảng đã bị xóa khỏi main
vì chúng không quan trọng. Vì vậy, mà không thay đổi bất kỳ công tắc trình biên dịch hoặc đáng lo ngại về định danh tiền xử lý nào được xác định, người ta có thể thấy rằng main
vô điều kiện vẽ một hình chữ nhật.
Để vẽ bằng nền tảng wxWidgets, quá trình xây dựng sẽ sử dụng rectangle_wx_widgets.cpp
. Để vẽ bằng QT, tệp rectangle_qt.cpp
sẽ được sử dụng, nhưng không được sử dụng cả hai. Như minh họa này cho thấy, không có mã nào được thay đổi để tạo mã cho cả hai nền tảng.Người ta có thể điều chỉnh quá trình xây dựng để lệnh build wxWidgets
sẽ bao gồm các đơn vị dịch phù hợp. Vì vậy, việc truyền tham số cho quá trình xây dựng sẽ tạo ra nền tảng thực thi cụ thể.
Không WxWidgets và SDL cung cấp các ví dụ tiền xử lý bạn đang tìm kiếm? –
(+1) Khái niệm được thể hiện bằng tiêu đề câu hỏi, đáng giá. Không có câu trả lời, đọc những người phát triển khác trả lời ... – umlcat