C++类中使用typedef和类中使用枚举类型(muduo日志类中遇到的问题)
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了C++类中使用typedef和类中使用枚举类型(muduo日志类中遇到的问题),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1774字,纯文字阅读大概需要3分钟。
内容图文
![C++类中使用typedef和类中使用枚举类型(muduo日志类中遇到的问题)](/upload/InfoBanner/zyjiaocheng/599/cb9b332506a449ccb0b3bc93c68ae1c5.jpg)
在学习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日志类中遇到的问题)全部内容,希望文章能够帮你解决C++类中使用typedef和类中使用枚举类型(muduo日志类中遇到的问题)所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。