MathWorks目前不允许您在MATLAB桌面打开时从mex文件使用
cout
,因为他们已经重定向了stdout。他们提供了一个函数mexPrintf作为解决方法。经过一番搜索,我认为可以扩展std::stringbuf
类来实现我需要的功能。以下是我目前的进展。这个代码足够健壮吗?还是需要重载其他方法或更好的方法来实现?(希望在通用UNIX环境中具有可移植性,并且如果此代码未与mex可执行文件链接,则能够像正常情况下一样使用std::cout
)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());