在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 的函数重载版本。