Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/145.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 将函数传递给C+中的类+;_C++_Function_Function Pointers_Std Function - Fatal编程技术网

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”更好的名称),而且更整洁。

这里有一些不起作用的代码。通常最好指定它不起作用的方式/原因。不编译?如果是,请提供错误信息。运行时错误?提供调用堆栈和/或错误。输出错误?提供输入/输出。