C++ 将函数传递给C+中的类+;
我想在一个类中存储一个函数,并在一个成员函数中调用这个函数。我知道使用函数指针可以实现这一点,但我想使用C++ 将函数传递给C+中的类+;,c++,function,function-pointers,std-function,C++,Function,Function Pointers,Std Function,我想在一个类中存储一个函数,并在一个成员函数中调用这个函数。我知道使用函数指针可以实现这一点,但我想使用std::function实现这一点 下面是一些不起作用的代码,但应该演示我想做的事情: double foo(double a, double b){ return a + b; } class Test{ private: std::function<double(double,double)> foo_ ; public: Te
std::function
实现这一点
下面是一些不起作用的代码,但应该演示我想做的事情:
double foo(double a, double b){
return a + b;
}
class Test{
private:
std::function<double(double,double)> foo_ ;
public:
Test(foo);
void setFoo(foo) {foo_ = foo;}
double callFoo(double a, double b){return foo_(a,b);}
};
int main(int argc, char const *argv[]) {
Test bar = Test(foo);
bar.callFoo(2,3);
return 0;
}
double foo(双a,双b){
返回a+b;
}
课堂测试{
私人:
std::函数foo;
公众:
测试(foo);
void setFoo(foo){foo_u=foo;}
double callFoo(double a,double b){return foo_(a,b);}
};
int main(int argc,char const*argv[]{
测试棒=测试(foo);
bar.callFoo(2,3);
返回0;
}
您几乎做对了,但是忘记了构造函数中的类型和setFoo
:
#include <functional>
#include <iostream>
double foo(double a, double b) {
return a + b;
}
class Test {
private:
std::function<double(double, double)> foo_;
public:
// note the argument type is std::function<>
Test(const std::function<double(double, double)> & foo) : foo_(foo) {}
// note the argument type is std::function<>
void setFoo(const std::function<double(double, double)>& foo) { foo_ = foo; }
double callFoo(double a, double b) { return foo_(a, b); }
};
int main(int argc, char const *argv[]) {
Test bar = Test(foo);
bar.callFoo(2, 3);
return 0;
}
#包括
#包括
双foo(双a,双b){
返回a+b;
}
课堂测试{
私人:
std::函数foo;
公众:
//注意参数类型是std::function
Test(const std::function&foo):foo_(foo){
//注意参数类型是std::function
void setFoo(const std::function&foo){foo_uz=foo;}
double callFoo(double a,double b){return foo_(a,b);}
};
int main(int argc,char const*argv[]{
测试棒=测试(foo);
bar.callFoo(2,3);
返回0;
}
顺便说一下,使用typedef来避免长而复杂的名称通常是有益的,例如,如果您这样做的话
typedef std::function<double(double,double)> myFunctionType
typedef std::function myFunctionType
您可以在任何地方使用myFunctionType
,这更容易阅读(前提是您发明了一个比“myFunctionType”更好的名称),而且更整洁。这里有一些不起作用的代码。通常最好指定它不起作用的方式/原因。不编译?如果是,请提供错误信息。运行时错误?提供调用堆栈和/或错误。输出错误?提供输入/输出。