反射,就是根据一个类名,即可根据类名获取类信息,创建新对象。反射在很多语言都天然支持,然而不包括 C++,但我们肯定会经常遇到这种根据类名生成对象的场景,这就需要我们自己动手来实现了。反正 C++ 这么强大,一定没有问题 :)
version 1
我们略做思考,就可以想到一种最简单的方案:
if (class_name == "A") {
return new A();
} else if (class_name == "B") {
return new B();
} ...
当然,这个方案略做思考就可以否掉,这么暴力毫无美感,代码难以维护,每定义个新的类就需要添加一段新的 if,如果很多人共用和维护一定是场灾难。
Version 2
然而其实我没有放弃,看起来需要添加的代码这么相似,好像用个 template 可以解决?
#include <string>
template<typename BaseClassName, typename SubClassName>
BaseClassName* CreateObject() {