Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android NDK重定向std::cout輸出到log

Android NDK重定向std::cout輸出到log

編輯:關於Android編程

第一步,繼承std::streambuf

#include 
#include 

class MyStreamBuf : public std::streambuf
{
	enum
	{
		BUFFER_SIZE = 255,
	};

public:
	MyStreamBuf()
	{
		buffer_[BUFFER_SIZE] = '\0';
		setp(buffer_, buffer_ + BUFFER_SIZE - 1);
	}

	~MyStreamBuf()
	{
		sync();
	}

protected:
	virtual int_type overflow(int_type c)
	{
		if (c != EOF)
		{
			*pptr() = c;
			pbump(1);
		}
		flush_buffer();
		return c;
	}

	virtual int sync()
	{
		flush_buffer();
		return 0;
	}

private:
	int flush_buffer()
	{
		int len = int(pptr() - pbase());
		if (len <= 0)
			return 0;

		if (len <= BUFFER_SIZE)
			buffer_[len] = '\0';

#ifdef ANDROID  
		android_LogPriority t = ANDROID_LOG_INFO;
		__android_log_write(t, "mylog", buffer_);
#else  
		printf("%s", buffer_);
#endif  

		pbump(-len);
		return len;
	}

private:
	char buffer_[BUFFER_SIZE + 1];
};

第二步,創建MyStreamBuf對象,並指定給std::cout

	MyStreamBuf g_MyStreamBuf;

	std::cout.rdbuf(&g_MyStreamBuf);
	
	//NOTE: std::endl會立即調用sync方法將緩沖區字符寫入log,並不只是換行用
	std::cout << "hello " << 123 << std::endl;
	std::cout << "pi = " << 3.14 << std::endl;

這樣,就可以是Eclipse的LogCat查看std::cout輸出了。

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved