C++类中使用typedef和类中使用枚举类型(muduo日志类中遇到的问题)

在学习muduo_base库中的日志类时,发现了一种新鲜的语法。
1.在类的public中typedef定义的新类型,可以在类外使用类名::新类型名的方式调用。

class Test
{
public:
  typedef int integer;
...
};

如果该语句放在public段中,则可以在类外部使用,如:

Test::integer a=1;//声明一个变量

2.在类的public中声明了枚举类,那么可以通过类名::enum值直接访问枚举值,不需要通过对象。
测试代码如下(自己写的挺好的例子^^):

#include<iostream>
using namespace std;
//目的:验证了在类的public中typedef定义的新类型,可以在类外使用 类名::新类型名 的方式调用
class Logger {
public:
	//枚举类型LogLevel
	enum LogLevel
	{
		TRACE,
		DEBUG,
		INFO,
		WARN,
		ERROR,
		FATAL,
		NUM_LOG_LEVELS,
	};

	typedef void(*OutputFunc)(const char* msg, int len);
	typedef void(*FlushFunc)();
	static void setOutput(OutputFunc);
	static void setFlush(FlushFunc);

	typedef int integer;
};
void defaultOutput(const char* msg, int len)
{
	cout << "defaultOutput" << endl;
}
void MyOutput(const char* msg, int len)
{
	cout << string(msg) << "," << len << endl;
}
void defaultFlush()
{
	cout << "defaultFlush" << endl;
}
void MyFlush()
{
	cout << "MyFlush" << endl;
}
Logger::OutputFunc g_output = defaultOutput;//创建函数指针g_output(全局变量)
Logger::FlushFunc g_flush = defaultFlush;//创建函数指针g_flush(全局变量)

void Logger::setOutput(OutputFunc out)
{
	g_output = out;
}

void Logger::setFlush(FlushFunc flush)
{
	g_flush = flush;
}

Logger::LogLevel g_logLevel = Logger::INFO;//定义全局变量g_logLevel并初始化
//可以通过 类名::enum值 直接访问枚举值,不需要通过对象
int main() {

	cout << g_logLevel << endl;
	Logger::integer a = 1;
	cout << a << endl;

	const char*str = "shenhang";
	g_output(str, strlen(str));
	g_flush();
	cout << "----------------------------------" << endl;
	Logger::setOutput(MyOutput);
	Logger::setFlush(MyFlush);
	g_output(str, strlen(str));
	g_flush();

	system("pause");
	return 0;
}

C++类中使用typedef和类中使用枚举类型(muduo日志类中遇到的问题)

上一篇:Django:ORM


下一篇:muduo echo服务器测试