MathWorks hiện không cho phép bạn sử dụng cout từ tệp mex khi máy tính để bàn MATLAB mở vì chúng đã chuyển hướng xuất chuẩn. Cách giải quyết hiện tại của họ là cung cấp hàm, mexPrintf, that they request you use instead. Sau khi googling xung quanh một chút, tôi nghĩ rằng nó có thể mở rộng std :: stringbuf lớp để làm những gì tôi cần. Đây là những gì tôi có cho đến nay. Đây có phải là đủ mạnh mẽ, hoặc có những phương pháp khác tôi cần phải quá tải hoặc một cách tốt hơn để làm điều này? (Looking for di động trong một môi trường UNIX nói chung và khả năng sử dụng std :: cout như bình thường nếu mã này không được liên kết với một mex thực thi)Chính xác quá tải chuỗi chuỗi để thay thế cout trong tệp mex MATLAB
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());
Khôi phục bộ đệm luồng std được chứng minh là rất quan trọng. Mà không làm như vậy chức năng mex của tôi dường như nhận được một số loại vấn đề bộ nhớ và bị rơi matlab khi tái biên dịch *. –