在《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*);
#endi