Puede crear una clase derivada de std::streambuf
que utiliza las funciones específicas de Android para enviar la secuencia de caracteres producida. Sin embargo, no sé dónde la implementación predeterminada de std::cout
envía caracteres a Android. Básicamente, esto sería algo como esto:
class androidbuf : public std::streambuf {
public:
enum { bufsize = 128 }; // ... or some other suitable buffer size
androidbuf() { this->setp(buffer, buffer + bufsize - 1); }
private:
int overflow(int c)
{
if (c == traits_type::eof()) {
*this->pptr() = traits_type::to_char_type(c);
this->sbumpc();
}
return this->sync()? traits_type::eof(): traits_type::not_eof(c);
}
int sync()
{
int rc = 0;
if (this->pbase() != this->pptr()) {
char writebuf[bufsize+1];
memcpy(writebuf, this->pbase(), this->pptr() - this->pbase());
writebuf[this->pptr() - this->pbase()] = '\0';
rc = __android_log_write(ANDROID_LOG_INFO, "std", writebuf) > 0;
this->setp(buffer, buffer + bufsize - 1);
}
return rc;
}
char buffer[bufsize];
};
Para establecer realmente para arriba std::cout
escribir en este búfer de la secuencia, deberías hacer algo como esto en su función main()
:
int main() {
std::cout.rdbuf(new androidbuf);
...
}
Esto crear una memoria fugas para la secuencia androidbuf
que, sin embargo, es algo intencional: la secuencia se puede escribir después de que main()
se salga y se vacía cuando se destruye std::cout
. Si no desea esto, se podía restaurar ya sea búfer de la secuencia original de std::cout
's o se establece en null y eliminar el regreso de rdbuf()
:
// avoid a one-time resource leak but don't get output afterwards:
delete std::cout.rdbuf(0);
subconjunto: redirigir la salida estándar a LogCat: http://stackoverflow.com/questions/10531050/redirect-stdout-to-logcat-in-android-ndk –
duplicado posible de [C/C++ printfs - ¿Dónde aparece en un código nativo de Android?] (Https://stackoverflow.com/questions/6426911/cc-printfs-wheres-it-appears-in-a-android-native-code) –