ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

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

2021-03-15 22:01:08  阅读:154  来源: 互联网

标签:typedef muduo cout int void 枚举 public 类中


在学习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;
}

在这里插入图片描述

标签:typedef,muduo,cout,int,void,枚举,public,类中
来源: https://blog.csdn.net/ShenHang_/article/details/114853702

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有