背景 CUPOJ支持许多的语言进行编译并运行。当需要给判题机增加一个新的语言时,更改源代码内容、编译、测试、发布,整个过程需要频繁改动内部代码,这样破坏了开闭原则。 因此不妨使用动态链接库解决这个问题。 然而经过查询,动态链接库是不支持直接导出类型的。好在我们可以通过对基类的继承,在动态链接库的源代码暴露一个一个方法用于返回动态链接库提供的对象。 本文实现的方式基于如何在运行时加载C++函数和类,这里提供一个将以上内容整合到CMake项目中的解决方案。 以CUP Online Judge Judger为例 CMak…