在 class 中担任成员 "variable"
Function as a member "variable" in class
我在考虑如何使用一些高级技术改进我的简单计算器。我想问一下,有没有什么方法可以创建一个 class,你可以为每个实例定义一个函数:
class Function
{
public:
Function(function);
~Function();
private:
function;
};
因此,例如您创建一个实例
Function divide(int x / int y); //For example
希望你能理解我的问题。
编辑:
于是研究了void (*foo)(int)
方法。它可以被使用。但最初的想法是创建一个通用函数,将函数本身保存在其中。不仅仅是指向外部定义的函数的指针。所以你可以这样做:
int main() {
//Define the functions
Function divide( X / Y ); //Divide
Function sum( X + Y ); //Sum
//Ask the user what function to call and ask him to enter variables x and y
//User chooses divide and enters x, y
cout << divide.calculate(x, y) << endl;
return 0;
}
回答:
@Chris Drew 指出:
当然,您的 Function
可以存储 std::function<int(int, int)>
然后您可以使用 lambda 构造 Function
:例如:Function divide([](int x,int y){return x / y;});
但是我不确定是什么您的 Function
提供了您不能只用 std::function
做的事情。
它回答了我的问题,不幸的是我的问题被搁置了,所以我无法将问题标记为已解决。
当然,您的 Function
可以存储 std::function<int(int, int)>
and then you can construct Function
with a lambda:
#include <functional>
#include <iostream>
class Function {
std::function<int(int, int)> function;
public:
Function(std::function<int(int, int)> f) : function(std::move(f)){};
int calculate(int x, int y){ return function(x, y); }
};
int main() {
Function divide([](int x, int y){ return x / y; });
std::cout << divide.calculate(4, 2) << "\n";
}
但是,就目前而言,我不确定 Function
提供了哪些您无法直接使用 std::function
执行的操作:
#include <functional>
#include <iostream>
using Function = std::function<int(int, int)>;
int main() {
Function divide([](int x, int y){ return x / y; });
std::cout << divide(4, 2) << "\n";
}
我在考虑如何使用一些高级技术改进我的简单计算器。我想问一下,有没有什么方法可以创建一个 class,你可以为每个实例定义一个函数:
class Function
{
public:
Function(function);
~Function();
private:
function;
};
因此,例如您创建一个实例
Function divide(int x / int y); //For example
希望你能理解我的问题。
编辑:
于是研究了void (*foo)(int)
方法。它可以被使用。但最初的想法是创建一个通用函数,将函数本身保存在其中。不仅仅是指向外部定义的函数的指针。所以你可以这样做:
int main() {
//Define the functions
Function divide( X / Y ); //Divide
Function sum( X + Y ); //Sum
//Ask the user what function to call and ask him to enter variables x and y
//User chooses divide and enters x, y
cout << divide.calculate(x, y) << endl;
return 0;
}
回答:
@Chris Drew 指出:
当然,您的 Function
可以存储 std::function<int(int, int)>
然后您可以使用 lambda 构造 Function
:例如:Function divide([](int x,int y){return x / y;});
但是我不确定是什么您的 Function
提供了您不能只用 std::function
做的事情。
它回答了我的问题,不幸的是我的问题被搁置了,所以我无法将问题标记为已解决。
当然,您的 Function
可以存储 std::function<int(int, int)>
and then you can construct Function
with a lambda:
#include <functional>
#include <iostream>
class Function {
std::function<int(int, int)> function;
public:
Function(std::function<int(int, int)> f) : function(std::move(f)){};
int calculate(int x, int y){ return function(x, y); }
};
int main() {
Function divide([](int x, int y){ return x / y; });
std::cout << divide.calculate(4, 2) << "\n";
}
但是,就目前而言,我不确定 Function
提供了哪些您无法直接使用 std::function
执行的操作:
#include <functional>
#include <iostream>
using Function = std::function<int(int, int)>;
int main() {
Function divide([](int x, int y){ return x / y; });
std::cout << divide(4, 2) << "\n";
}