это не что-то в твоей жизни. Сообщение об ошибке (из вашего комментария):
java.lang.IllegalStateException: Не удалось найти метод buClick (View) в контексте родителя или предка для атрибута android: onClick, определенного в классе представления android.support. v7.widget.AppCompatButton с идентификатором 'bu1
blockquote>метод onClick, определенный в манифесте для кнопки' bu1 ', но у вас нет соответствующего метода buClick (View) в вашей активности. Просто проверьте документацию и примеры атрибута onClick в Views в манифесте и узнайте, как его реализовать. Это тривиально.
Вы действительно не хотите перегружаться std::stringbuf
, Вы хотите перегрузиться std::streambuf
или std::basic_streambuf
(если Вы хотите поддерживать несколько типов символов), также необходимо переопределить водосливный метод также.
Но я также думаю, что необходимо заново продумать решение проблемы.
cout
просто ostream
, таким образом, если все классы / функции берут ostream
затем можно передать в чем-либо, что Вы любите. например. cout
, ofstream
, и т.д.
Если бы это слишком твердо затем, я создал бы свою собственную версию cout
, возможно, названный mycout
это может быть определено или во время компилятора или во время во время выполнения (в зависимости от того, что Вы хотите сделать).
Простое решение может быть:
#include <streambuf>
#include <ostream>
class mystream : public std::streambuf
{
public:
mystream() {}
protected:
virtual int_type overflow(int_type c)
{
if(c != EOF)
{
char z = c;
mexPrintf("%c",c);
return EOF;
}
return c;
}
virtual std::streamsize xsputn(const char* s, std::streamsize num)
{
mexPrintf("*s",s,n);
return num;
}
};
class myostream : public std::ostream
{
protected:
mystream buf;
public:
myostream() : std::ostream(&buf) {}
};
myostream mycout;
И версия суда могла просто быть:
typedef std::cout mycout;
Версия среды выполнения является немного большим количеством работы, но легко выполнимый.
Shane, большое спасибо за Вашу справку. Вот моя заключительная рабочая реализация.
class mstream : public std::streambuf {
public:
protected:
virtual std::streamsize xsputn(const char *s, std::streamsize n);
virtual int overflow(int c = EOF);
};
...
std::streamsize
mstream::xsputn(const char *s, std::streamsize n)
{
mexPrintf("%.*s",n,s);
return n;
}
int
mstream::overflow(int c)
{
if (c != EOF) {
mexPrintf("%.1s",&c);
}
return 1;
}
...
// Replace the std stream with the 'matlab' stream
// Put this in the beginning of the mex function
mstream mout;
std::streambuf *outbuf = std::cout.rdbuf(&mout);
...
// Restore the std stream buffer
std::cout.rdbuf(outbuf);
cout
конкретный поток вывода символов. Если Вы хотите a cout
это пишет в файл, используйте fstream
, особенно ofstream
. У них есть тот же интерфейс это cout
обеспечивает. Кроме того, если Вы хотите захватить их буфер (с rdbuf
) Вы можете.