Linux下C++编程使用动态链接库
在《 Linux 下 C 编程使用动态链接库》一文中已了解到了 C 语言里如何使用共享库 SO 了,但在 C++ 里可全是类,该如何实现呢? C 语言中的操作只能导出全局函数,并不能导出类的方法,故而需要设计相关的全局函数来封装一层。这里用到了“类工厂函数”的设计模式,定义一个抽象类(含有纯虚函数)的头文件,然后在 SO 源文件和使用的源文件里均包含该头文件,在 SO 里继承并实现抽象类里的纯虚函数。 具体看下面的实例,头文件里创建多边形类(作为接口),而在 SO 继承它并实现三角形类,并且设计了全局的创建和销毁类对象的函数: polygon.hpp (纯虚父类,多边形类): #ifndef POLYGON_HPP #define POLYGON_HPP class polygon { protected: double _side_length; public: polygon() : _side_length(0) {} virtual ~polygon() {} void set_side_length(double side_length) { _side_length = side_length; } virtual double area() const = 0; }; typedef polygon* create_t(); typedef void destroy_t(polygon*); #endif triangle.cpp (三角形类,继承多边形类,实现其纯虚函数): #include "polygon.hpp" #include <math.h> class triangle : public polygon { public: virtual double area() const { return _side_length * _side_length * sqrt(3) / 2; } }; extern "C" polygon* create() { r...