我创建了一个类Base
,它有一个函数addSuccessor()
,它将函数的地址作为参数并将其存储在后继者中。如何在 addSuccessor()
中传递另一个对象的函数。
这是我的程序。我认为我的 main()
有一些错误。
#include <iostream>
#include<vector>
using namespace std;
class Base{
public:
void (*successor)()=NULL;
void addSuccessor ( void (*f)() )
{
successor=f;
}
void start()
{
cout<<"In Class"<<endl;
if(!successor==NULL)
successor();
else
cout<<"No Successor"<<endl;
}
};
class Second{
public:
void foo()
{
cout<<"Successor";
}
};
int main()
{
Base obj;
Second obj2;
obj.addSuccessor(&obj2.foo());
obj.start();
}
最佳答案
函数指针非常有限。使用 std::function
(在 header <functional>
中定义),它可以以类型删除的方式存储任何可调用对象,并提供模板成员函数来设置仿函数,其中 perfect forwarding用于将提供的仿函数转发到 successor
: ( std::forward
在 header <utility>
中定义)
class Base {
std::function<void()> successor;
public:
template <typename F>
void add_successor(F&& f)
{
successor = std::forward<F>(f);
}
void start()
{
if (successor) {
successor();
} else {
std::cout << "No Successor\n";
}
}
};
然后,你可以传递一个lambda expression至add_successor
:
obj.add_successor([&]{ obj2.foo(); });
( live demo )
关于c++ - 如何将一个类的函数作为另一个类的另一个函数的参数传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60255986/