造轮子笔记-基础库的基础设施

上一篇提到muduo库依赖boost,但并没有进行详细说明.实际上,在进行关于线程的重构过程中就已经涉及到了对boost依赖的改进.

函数与函数式编程

关于函数式编程,各类博客各个论坛都有不同的意见,这里不多展开,只对一等函数做一点说明.

在函数式语言中,函数是一等公民,而在C/C++中不是,早期的c语言中大多使用函数指针来传递函数参数.C++中的函数对象类是指一个重载了operator()的类,类似

1
2
3
4
5
6
class Functor {
public:
void operator() {
...
}
};

这样以来我们就可以用对象来保存函数,进而扩展一些类型安全的类似函数式的写法.

boost库提供了boost::functionboost::bind,而C++11提供了std::function,std::bindstd::ref,可以方便的代替boost而不需自己封装.

不可复制的对象

一个类可以通过继承boost::noncopyable来使其对象不可复制,包括不可通过复制构造函数复制和不可通过operator=复制.muduo库同时也实现了一个copyable类,不过我觉得不要问题也不大.

关于重造一个noncopyable的文章也很多,这里不再介绍了

any类

boost::any提供了一个可以存放任何对象的类,而且这一项功能会在C++17中出现.实际上,C++14已经有了实验性质的std::experimental::any,所以再一次用标准库代替了boost.


本博的原创作品作品采用知识共享署名 2.5 中国大陆许可协议 进行许可,欢迎转载,但转载请注明出处,并保持转载后文章内容的完整。
本文链接:http://fallenwood.github.io/2017/01/02/cpp-11-basic-bases/