MathWorks는 현재 stdout이 재 지정 되었기 때문에 MATLAB 데스크톱이 열려있을 때 mex 파일에서 cout을 사용할 수 없습니다. 현재 해결 방법은 함수 mexPrintf, that they request you use instead을 제공하는 것입니다. 인터넷 검색을 조금 해본 후, 필자는 필요한 작업을 수행하기 위해 std :: stringbuf 클래스를 확장 할 수 있다고 생각합니다. 여기 내가 지금까지 가지고있는 것이있다. 이것은 충분히 견고합니까? 아니면 과부하가 필요한 다른 방법이 있습니까? 아니면이를 수행하는 더 좋은 방법이 있습니까?MATLAB mex 파일에서 cout을 대체하기 위해 stringbuf를 올바로 오버로드합니다.
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());
std 스트림 버퍼를 복원하는 것이 매우 중요합니다. 이렇게하지 않고도 내 mex 함수는 일종의 메모리 문제를 일으키고 다시 컴파일 할 때 matlab을 추락시킨 것처럼 보였다. –