一、具体情况
在前面的文章“名称反射创建对象的一种实现”发布后,有同学问为什么在实例中既给了模板的名称,又给了字符串名称,这还有什么意义呢?这个问题非常好,当时一时偷懒,没有把事情说清楚,这篇文章算是对提问同学的一个回答。
其实很简单,如果把实现的类名和声明的类型换成不同的类,同时这个需要反射的类必须继承前面提到的ClassInstance,再在给定的类(即Worker)中实现一个创建,那么整个反射的过程就符合了一般反射的习惯。
二、补充例程
基于上面的分析,看下面的代码分析即可明白:
......
//测试类
class Worker {
public:
Worker() {
}
Worker(int a, int b) : a_(a), b_(b) {
}
public:
void display() {
std::cout << "-this is Worker display function!--:" << a_ + b_ << std::endl; }
private:
int a_ = 0;
int b_ = 0;
};
class Worker1 {
public:
Worker1() {
}
Worker1(int a) {
}
public:
void display1() {
std::cout << "--this is worker1 display1 function--" << std::