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());