构建std::map到为派生类重载的函数可以通过使用函数指针或者函数对象来实现。下面是一个示例代码:
#include <iostream>
#include <map>
class Base {
public:
virtual void func() {
std::cout << "Base::func()" << std::endl;
}
};
class Derived1 : public Base {
public:
void func() override {
std::cout << "Derived1::func()" << std::endl;
}
};
class Derived2 : public Base {
public:
void func() override {
std::cout << "Derived2::func()" << std::endl;
}
};
int main() {
std::map<int, void(*)()> funcMap;
// 添加派生类的函数到map中
funcMap[1] = []() { Derived1 d1; d1.func(); };
funcMap[2] = []() { Derived2 d2; d2.func(); };
// 调用map中的函数
if (funcMap.find(1) != funcMap.end()) {
funcMap[1]();
}
if (funcMap.find(2) != funcMap.end()) {
funcMap[2]();
}
return 0;
}
在上述示例中,我们使用了std::map来存储函数指针,键为整数,值为指向函数的指针。我们将派生类的函数通过lambda表达式的方式添加到map中,并在需要调用时通过键值来执行相应的函数。
这种方法的优势是可以根据需要动态地添加、删除和修改函数,同时可以根据不同的键值调用不同的函数。这在一些需要根据条件选择不同函数执行的场景中非常有用。
腾讯云相关产品和产品介绍链接地址:
领取专属 10元无门槛券
手把手带您无忧上云