在C++中,可以使用模板和函数重载来实现具有泛型接口的函数,并根据传递的子类进行不同的操作。下面是一个示例代码:
#include
// 基类
class Base {
public:
virtual void operation() = 0;
};
// 子类 A
class SubA : public Base {
public:
void operation() override {
std::cout << "Performing operation for SubA" << std::endl;
}
};
// 子类 B
class SubB : public Base {
public:
void operation() override {
std::cout << "Performing operation for SubB" << std::endl;
}
};
// 使用模板和函数重载实现具有泛型接口的函数
template
void performOperation(T* obj) {
obj->operation();
}
// 函数重载,用于根据传递的子类进行不同的操作
void performOperation(SubA* obj) {
std::cout << "Special operation for SubA" << std::endl;
}
void performOperation(SubB* obj) {
std::cout << "Special operation for SubB" << std::endl;
}
int main() {
Base* objA = new SubA();
Base* objB = new SubB();
// 根据传递的子类进行不同的操作
performOperation(objA); // 调用了 performOperation(SubA* obj)
performOperation(objB); // 调用了 performOperation(SubB* obj)
delete objA;
delete objB;
return 0;
}
在上面的示例中,我们定义了一个基类 Base
和两个子类 SubA
和 SubB
。基类中有一个纯虚函数 operation()
,子类分别实现了这个函数。
然后,我们使用模板和函数重载来实现了一个具有泛型接口的函数 performOperation()
。这个函数接受一个指向基类对象的指针,并调用其 operation()
函数。
此外,我们还定义了两个函数重载版本的 performOperation()
,分别接受指向 SubA
和 SubB
对象的指针。这两个函数将执行特定于子类的操作。
在 main()
函数中,我们创建了 SubA
和 SubB
的对象,并将它们的指针传递给 performOperation()
函数。根据传递的子类对象,会调用相应的函数重载版本,从而实现了根据子类进行不同操作的需求。
运行上述代码,输出如下:
Special operation for SubA
Performing operation for SubB
可以看到,对于 SubA
对象,调用了特定于 SubA
的函数重载版本,而对于 SubB
对象,调用了特定于 SubB
的函数重载版本。