मैं सी एपीआई के एक टुकड़े के लिए एक जंगली रैपर लिखने की कोशिश कर रहा हूं। संख्या की श्रेणी के लिएमैं एक सी-स्टाइल कॉलबैक में जंग को बंद कैसे कर सकता हूं?
typedef bool (*listener_t) (int, int);
bool do_it(int x1, int y1, int x2, int y2, listener_t listener)
समारोह अपने काम करता है जब तक कि श्रोता झूठे रिटर्न: एक सी निर्माण मैं के साथ संघर्ष नहीं है। उस स्थिति में यह गणना गणना करता है। मैं इस तरह एक जंग आवरण करना चाहते हैं:
fn do_with_callback<F>(start: (i32, i32), end: (i32, i32), callback: F)
where F: Fn(i32, i32) -> bool
rust-bindgen
मेरे लिए यह बनाई गई, थोड़ा स्पष्टता के लिए संपादित:
pub type listener_t = Option<extern "C" fn(x: c_int, y: c_int) -> c_bool>;
pub fn TCOD_line(xFrom: c_int, yFrom: c_int,
xTo: c_int, yTo: c_int,
listener: listener_t) -> c_bool;
मैं एक बंद या एक सी शैली के लिए एक विशेषता संदर्भ में परिवर्तित करना चाहिए मेरी do_with
कार्यों में कॉलबैक:
pub fn do_with_callback<F>(start: (i32, i32), end: (i32, i32), callback: F) -> Self
where F: Fn(i32, i32) -> bool
{
let wrapper = ???;
unsafe {
ffi::do_it(start.0, start.1, end.0, end.1, Some(wrapper))
};
}
चले गए इस पुस्तकालय पास फोन करने वाले-विशिष्ट जानकारी की एक सी ग्राहक कैसे करता है? ऐसा लगता है कि एक एपीआई का उदाहरण है जो इसे अनुमति देने के लिए डिज़ाइन नहीं किया गया था। शायद एपीआई लेखकों का मानना है कि इसकी आवश्यकता नहीं है, और आप '(x, y)' के आधार पर आवश्यक सभी निर्णय ले सकते हैं। – Shepmaster
ठीक है, सी पुस्तकालय विशेष रूप से अच्छी तरह से डिजाइन नहीं है। यह 'स्थिर और वैश्विक राज्य पर बहुत निर्भर करता है। और यह थ्रेड-सुरक्षित होने का भी प्रयास नहीं करता है। – Tomo