Tôi đã không thấy điều này ở bất cứ nơi nào (hoặc có lẽ tôi là jsut đơn giản không nhìn thấy nó) nhưng có cách nào để sử dụng JNI để trả lại c/c + + đối tượng và sử dụng đối tượng trong java?Tôi có thể tham khảo các đối tượng C++ trong Mã Java bằng JNI không?
Ví dụ (rất đơn giản):
class simpleClass{
...
private:
int intVar;
public:
int getIntVar();
void setIntVar(int someNum);
...
}
Trong mã java của tôi, làm thế nào tôi sẽ đi về làm một cái gì đó như:
...
simpleClass sc = new simpleClass();
sc.setIntVar(9);
System.out.println(sc.getIntVar());
...
Tôi nhận ra đây là một ví dụ rất đơn giản nhưng tôi m chỉ cần tìm khái niệm - lớp tôi có trong tâm trí đó là trong c + + là rất lớn và đang tìm cách để tránh tạo ra một TÔN của các phương pháp bao bọc ...
Nếu nó không thể là tốt, chỉ cần hop ing để tiết kiệm một vài ngày mã hóa lol
Lưu ý rằng các mẫu C++ không liên quan đến câu hỏi này, vì các mẫu được biên dịch trong C++. JNI sẽ phải hỗ trợ các lớp được khởi tạo từ các khuôn mẫu đó, trông không khác gì so với các lớp thông thường. –
@Dan Nếu bạn viết một lớp mẫu không chỉ tiêu đề, bạn phải có khả năng báo cho trình biên dịch tạo một phiên bản mới của lớp trong mã máy khách, vì vậy tôi nghĩ rằng trình biên dịch cũng phải biết về các khuôn mẫu (mặc dù không có ý tưởng nếu đó là yêu cầu của tiêu chuẩn - không bao giờ phải làm điều đó trong thực tế). – Voo
@Voo Nó cần định nghĩa của mẫu tại thời gian biên dịch để tạo ra sự khởi tạo. Một khi được tạo cho mỗi loại cần thiết sử dụng mã đối tượng cũng giống như khi bạn đã viết ra một lớp cho từng loại. AFAIK mà không bao gồm tệp cpp bạn không thể tham chiếu mẫu không có trong đơn vị dịch của bạn trừ khi định nghĩa của nó hoàn toàn nội tuyến vì cùng một lý do. – AJG85