1. 背景
在java中,jvm支持类的动态链接(Class.forName(String className)),用起来也很方便。动态链接是实现IOC(Inversion of Control,控制反转,更形象的称作依赖注入)的关键,用于将类间依赖从程序移到配置文件中。在框架不重新编译的情况下,替换被依赖的类。
在linux下,C++只能通过C的dl API实现动态链接,需要先将动态链接库编译成.so,然后再调用API进行链接。下面看一下如何实现动态链接C++类。和java实现IOC一样,链接类需要依赖于接口,先定义一下框架需要依赖的接口部分:
class UserInterface {
public:
virtual bool func() = 0;
};
动态链接库实现部分继承这个接口,进行实现。
class ConcretInterface: public UserInterface {
public:
virtual bool func() {
printf("A implementition of UserInterface");
}
};