Actuellement, MathWorks ne vous permet pas d'utiliser cout depuis un fichier mex lorsque le bureau MATLAB est ouvert car il a redirigé stdout. Leur solution de contournement actuelle fournit une fonction, mexPrintf, that they request you use instead. Après un peu de recherche, je pense qu'il est possible d'étendre la classe std :: stringbuf pour faire ce dont j'ai besoin. Voici ce que j'ai jusqu'ici. Est-ce assez robuste, ou existe-t-il d'autres méthodes que je devrais surcharger ou une meilleure façon de le faire? (Recherche de la portabilité dans un environnement UNIX général et la possibilité d'utiliser std :: Cout comme normal si ce code est pas lié à un exécutable MEX)Surcharger correctement un stringbuf pour remplacer cout dans un fichier 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());
La restauration du tampon de flux std s'est avérée très importante. Sans le faire, ma fonction mex semblait avoir un problème de mémoire et s'est écrasée matlab lors de la re * compilation *. –