42 votes

Est-ce que "std::cout" est utilisable dans Android-ndk

Dans Android-ndk, nous pourrions utiliser "__android_log_write", "__android_log_print", ... etc pour envoyer des messages à la fenêtre "LogCat". Et si j'utilisais "std::cout" pour sortir des chaînes ? Par exemple

 std::cout << "some strings" << std::endl;

Où seraient envoyées les chaînes.

Il semble qu'Android n'ait pas d'applications console et les chaînes ci-dessus peuvent ne pas être envoyées. Pourrais-je rediriger le "stdout" vers un fichier afin que l'envoi de chaînes à "std::cout" soit équivalent à la journalisation des messages ?

2voto

y30 Points 479

Une autre option:

 #include <sstream>

class MyStream
{
private:
   std::stringstream m_ss;
   int m_logLevel;
public:

   MyStream(int Xi_logLevel)
   {
      m_logLevel = Xi_logLevel;
   };
   ~MyStream()
   {
      __android_log_print(m_logLevel,LOG_TAG,"%s", m_ss.str().c_str());
   }

   template<typename T> MyStream& operator<<(T const& Xi_val)
   {
      m_ss << Xi_val;
      return *this;
   }
};

#define MY_LOG(LOG_LEVEL) MyStream(ANDROID_LOG_##LOG_LEVEL) << __FUNCTION__ << ":" << __LINE__ << " : "

AVANTAGES:

(1) Les messages sont imprimés immédiatement.

LES INCONVÉNIENTS:

(1) Vous devez changer votre code (std::cout -> MY_LOG(X)).

(2) Chaque une seule empreinte produit un objet et le détruit.

(*** Cette réponse est basée sur cette réponse )

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X