में cout को प्रतिस्थापित करने के लिए एक स्ट्रिंगबफ को सही ढंग से लोड करने के लिए मैथवर्क्स वर्तमान में मैटब्लैब डेस्कटॉप खोलने पर मैटब्लॉक डेस्कटॉप को खोलने की अनुमति नहीं देता है क्योंकि उन्होंने stdout को रीडायरेक्ट किया है। उनका वर्तमान कामकाज एक समारोह प्रदान कर रहा है, mexPrintf, that they request you use instead। थोड़ा सा घूमने के बाद, मुझे लगता है कि मुझे जो चाहिए वह करने के लिए std :: stringbuf क्लास का विस्तार करना संभव है। यहां तक कि मेरे पास अभी तक क्या है। क्या यह पर्याप्त मजबूत है, या क्या अन्य विधियों को अधिभारित करने या इसे करने का बेहतर तरीका है? (एक सामान्य यूनिक्स वातावरण में पोर्टेबिलिटी और अगर यह कोड एक MEX निष्पादन के खिलाफ जुड़ा हुआ नहीं है सामान्य रूप में std :: अदालत उपयोग करने की क्षमता के लिए खोज रहे)MATLAB MAX फ़ाइल
class mstream : public stringbuf {
public:
virtual streamsize xsputn(const char *s, std::streamsize n)
{
mexPrintf("*s",s,n);
return basic_streambuf<char, std::char_traits<char>>::xsputn(s,n);
}
};
mstream mout;
outbuf = cout.rdbuf(mout.rdbuf());
एसडीडी स्ट्रीम बफर को बहाल करना बहुत महत्वपूर्ण साबित हुआ। ऐसा करने के बिना मेरे मैक्स फ़ंक्शन को कुछ प्रकार की मेमोरी समस्या और पुन: संकलित * पर क्रैश मैटलैब लग रहा था। –