Boost::function 继承使用:C++ 函数对象封装示例
Boost::function 是一个函数对象的封装类,可以用于存储和调用任意可调用对象,包括函数指针、函数对象、成员函数指针等。
以下是一个使用 Boost::function 继承的示例代码:
#include <iostream>
#include <boost/function.hpp>
class Base {
public:
virtual void print() {
std::cout << 'Base' << std::endl;
}
};
class Derived : public Base {
public:
void print() override {
std::cout << 'Derived' << std::endl;
}
};
int main() {
boost::function<void(Base&)> func;
Base base;
Derived derived;
// 设置 func 为一个打印函数的函数对象
func = [](Base& obj) {
obj.print();
};
// 调用 func,并传入 base 对象
func(base); // 输出:Base
// 调用 func,并传入 derived 对象
func(derived); // 输出:Derived
return 0;
}
在上面的例子中,我们定义了一个基类 Base 和一个派生类 Derived,它们都具有一个名为 print 的虚函数。然后,我们使用 Boost::function 定义了一个函数对象 func,它接受一个 Base 类型的引用参数,并且没有返回值。
接下来,我们通过使用 lambda 表达式将一个能够打印对象类型的函数赋值给 func。在 lambda 表达式中,我们调用了对象的 print 函数。
然后,我们分别创建了一个 Base 对象和一个 Derived 对象,并将它们分别传递给 func。当我们调用 func(base) 时,会调用 base 的 print 函数,并输出 'Base'。当我们调用 func(derived) 时,会调用 derived 的 print 函数,并输出 'Derived'。
这个例子展示了 Boost::function 的继承特性,即可以通过基类类型的函数对象调用派生类的成员函数。
原文地址: https://www.cveoy.top/t/topic/lXa 著作权归作者所有。请勿转载和采集!