मैं अपने सी ++ पुस्तकालयों को सी # में उपलब्ध कराने के लिए एक रैपर इंटरफ़ेस बनाने के लिए सफलतापूर्वक SWIG का उपयोग कर रहा हूं। हाल ही में मैंने कुछ boost::optional<>
ऑब्जेक्ट्स का खुलासा किया और एसडब्ल्यूआईजी के साथ समस्याएं आ रही हैं। क्या इससे निपटने का कोई मानक तरीका है? किसी को इससे पहले इसमें भाग लेना होगा ...क्या आप एक बूस्ट :: वैकल्पिक <> कर सकते हैं?
उत्तर
चूंकि एसडब्ल्यूआईजी बूस्ट प्रकारों को समझ नहीं पा रहा है, टाइपमैप को लिखा जाना है। boost::optional<int>
के लिए टाइपमैप की एक जोड़ी यहां दी गई है।
%typemap(in) boost::optional<int> %{
if($input == Py_None)
$1 = boost::optional<int>();
else
$1 = boost::optional<int>(PyLong_AsLong($input));
%}
एक लौटे boost::optional<int>
एक कोई नहीं या एक अजगर पूर्णांक में परिवर्तित हो जाएगा:
%typemap(out) boost::optional<int> %{
if($1)
$result = PyLong_FromLong(*$1);
else
{
$result = Py_None;
Py_INCREF(Py_None);
}
%}
धन्यवाद! मुझे इसे पायथन के बजाय सी # के लिए अनुकूलित करना होगा, लेकिन यह कोई समस्या नहीं होनी चाहिए। – aldo
ओह, पूरी तरह से आपके सी # टैग को याद किया, लेकिन यह एक छोटा बदलाव होना चाहिए। –
एक संभावित सी # समाधान
अजगर, None
या एक पूर्णांक से एक समारोह में पारित किया जा सकता std :: vector
#if SWIGCSHARP
// C++
%typemap(ctype) boost::optional<int32_t> "void *"
%typemap(out) boost::optional<int32_t> %{
std::vector<int32_t> result_vec;
if (!!$1)
{
result_vec = std::vector<int32_t>(1, $1.get());
}
else
{
result_vec = std::vector<int32_t>();
}
$result = new std::vector<uint32_t>((const std::vector<uint32_t> &)result_vec);
%}
// C#
%typemap(imtype) boost::optional<int32_t> "global::System.IntPtr"
%typemap(cstype) boost::optional<int32_t> "int?"
%typemap(csout, excode=SWIGEXCODE) boost::optional<int32_t> {
SWIG_IntVector ret = new SWIG_IntVector($imcall, true);$excode
if (ret.Count > 1) {
throw new System.Exception("Return vector contains more then one element");
}
else if (ret.Count == 1) {
return ret[0];
}
else {
return null;
}
}
#endif //SWIGCSHARP
- 1. वैकल्पिक <Integer> को वैकल्पिक <Long>
- 2. वैकल्पिक वैकल्पिक से वैकल्पिक <java.lang.Double>
- 3. वैकल्पिक <T>
- 4. वह भाषा क्या है? (<%REPEAT...%>, <% वैकल्पिक ...%>)
- 5. क्या आप डब्ल्यूसीएफ सेवा के माध्यम से Func <T,bool> पास कर सकते हैं?
- 6. क्या आप <section role = "main"> तत्व के अंदर <aside> तत्व का उपयोग कर सकते हैं?
- 7. क्या आप न्यूलाइन अक्षर \ n ब्रेक <br /> के रूप में प्रदर्शित कर सकते हैं?
- 8. क्या आप बंद कर सकते हैं?
- 9. वैकल्पिक <Map>
- 10. सी में आप क्या नहीं कर सकते हैं जिसे आप उद्देश्य-सी में कर सकते हैं?
- 11. एक वैकल्पिक <> मौजूद है
- 12. क्या आप एक साथ डीएलएस बंडल कर सकते हैं?
- 13. क्या आप एफ # में एक ऑपरेटर (***) परिभाषित कर सकते हैं?
- 14. बूस्ट :: वैकल्पिक
- 15. मैं कैसे परिवर्तित कर सकते हैं String [] <String>
- 16. क्या आप रुबी में <=> परिभाषित कर सकते हैं और फिर ==,>, <, > =, और <= स्वचालित रूप से परिभाषित किया गया है?
- 17. क्या आप एक पूर्ण स्क्रीन पृष्ठभूमि के रूप में HTML5 <video> प्रदर्शित कर सकते हैं?
- 18. क्या has_many एसोसिएशन पर "first_or_build" विधि है? इसका मतलब है आप भी कर सकते हैं</p> <pre><code>SomeModel.some_scope.first_or_initialize </code></pre> <p>:
- 19. क्या आप आर में डेटा.फ्रेम के "टाई" या वैकल्पिक कार्यान्वयन प्रदान कर सकते हैं?
- 20. क्या आप वैकल्पिक वेब एप्लिकेशन स्टैक की अनुशंसा कर सकते हैं?
- 21. क्या आप कोड लक्ष्यीकरण .NET 3.5 में वैकल्पिक पैरामीटर का उपयोग कर सकते हैं?
- 22. क्या JQuery <label> के टेक्स्ट द्वारा चयन कर सकते हैं या इसके गुणों का आकलन कर सकते हैं?
- 23. क्या XmlSerializer एक Nullable <int> में deserialize कर सकते हैं?
- 24. क्या आप सूची <MyObject> में स्थिति 0 पर डाल सकते हैं?
- 25. क्या आप मॉडल के लिए एकाधिक मॉडल एडमिन्स पंजीकृत कर सकते हैं? वैकल्पिक?
- 26. क्या आप डब्ल्यूसीएफ सेवा विधि में वैकल्पिक पैरामीटर का उपयोग कर सकते हैं?
- 27. क्या कर सकते हैं कि sed क्या कर सकते हैं?
- 28. आप IENumerable <Foo> पर क्या कहते हैं?
- 29. यदि आप संदर्भ द्वारा अपवाद पकड़ते हैं, तो क्या आप इसे संशोधित कर सकते हैं और पुनर्स्थापित कर सकते हैं?
- 30. रिटर्न प्रकार std :: वैकल्पिक <std :: variant <...>>
क्या यह व्यापक सवाल नहीं है कि SWIG कैसे बुद्धिमान करता है एच टेम्पलेट्स? मैंने SWIG का उपयोग नहीं किया है, लेकिन एक त्वरित स्कैन सुझाव देता है कि कुछ सीमाएं टेम्पलेट्स मुद्रित हो सकती हैं। – dotcomslashnet
@ डॉट कॉमस्लाशनेट हां और नहीं। SWIG को किसी भी चीज़ के बारे में अनुवाद/लपेटने के तरीके को अनुकूलित करने के लिए कॉन्फ़िगर किया जा सकता है। मैं उम्मीद कर रहा था कि दोनों एसडब्ल्यूआईजी और 'बूस्ट :: वैकल्पिक <>' व्यापक रूप से पर्याप्त रूप से उपयोग किए जाते हैं कि किसी ने पहले ही ऐसा किया है इसलिए मुझे पहिया का पुन: आविष्कार करने की आवश्यकता नहीं है। :-) – aldo