cuốn sách gpt4 ai đã làm

c++ - Gói thư viện c++ trong c? (không có "c bên ngoài")

In lại Tác giả: Taklimakan Thời gian cập nhật: 2023-11-02 23:54:32 28 4
mua khóa gpt4 Nike

Có thể gói thư viện c++ vào c không?

我该怎么做?

Có dụng cụ làm sẵn nào không?

(yêu cầu quyền truy cập vào thư viện c++ hiện có, nhưng chỉ có thể sử dụng C)

câu trả lời hay nhất

Bạn có thể viết mã hướng đối tượng bằng C, vì vậy nếu đó là thư viện C++ hướng đối tượng, bạn có thể gói nó trong giao diện C. Tuy nhiên, việc này có thể khá tẻ nhạt, đặc biệt nếu bạn cần hỗ trợ tính kế thừa, chức năng ảo và những thứ tương tự.

Nếu thư viện C++ áp dụng lập trình chung (mẫu), nó có thể rất phức tạp (bạn cần cung cấp tất cả các phiên bản mẫu bắt buộc) và nhanh chóng đạt đến điểm không đáng có.

Giả sử đó là OO, đây là bản phác thảo cơ bản về cách triển khai OO trong C:

Các lớp C++:

lớp cpp {
public:
cpp(int i);
vô hiệu f();
};

Giao diện C:

#ifdef __cplusplus
bên ngoài "C" {
#endif
typedef void* c_handle;

c_handle c_create(int i)
{
trả về cpp mới (i);
}

void c_f(c_handle hdl)
{
static_cast(hdl)->f();
}

void c_destroy(c_handle hdl)
{
xóa static_cast(hdl);
}
#ifdef __cplusplus
}
#endif

Bạn có thể sửa đổi nó theo yêu cầu của bạn. Ví dụ: nếu đây là giao diện C công khai cho API C++ riêng tư, thì việc đưa con trỏ thực tế làm tay cầm có thể khiến nó dễ bị tấn công. Trong trường hợp đó, bạn đưa ra các thẻ điều khiển về cơ bản là số nguyên, lưu trữ các con trỏ trong bản đồ từ tay cầm tới con trỏ và truyền qua tìm-thay thế.

Việc có các hàm trả về chuỗi và các tài nguyên có kích thước động khác cũng có thể trở nên khá phức tạp. Bạn cần người gọi C cung cấp bộ đệm nhưng nó không thể biết trước kích thước. Một số API (chẳng hạn như một phần của API WIn32) cho phép người gọi gọi các hàm như vậy với bộ đệm có độ dài 0, trong trường hợp đó chúng trả về độ dài của bộ đệm được yêu cầu. Tuy nhiên, làm như vậy sẽ khiến các cuộc gọi thông qua API trở nên kém hiệu quả. (Nếu chỉ biết độ dài của bộ đệm cần thiết sau khi thuật toán được thực thi thì nó sẽ cần được thực thi hai lần.)
Một điều tôi đã làm trước đây là đưa ra một mã điều khiển (tương tự như mã trong đoạn mã trên) cho một chuỗi được lưu trữ nội bộ và cung cấp API để yêu cầu kích thước bộ đệm mong muốn, truy xuất chuỗi cung cấp bộ đệm và Phá hủy tay cầm (xóa chuỗi được lưu trữ nội bộ).
Đây là PITA thực sự, nhưng C là như vậy.

Về c++ - gói thư viện c++ trong c? (không có "extern c"), chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/6047255/

28 4 0
Taklimakan
Hồ sơ

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá taxi Didi miễn phí
Phiếu giảm giá taxi Didi
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress