到目前为止,我一直在使用C++ 11编写代码,而我正试图了解auto在新版本中的工作原理.特别是我有两个函数(在示例中为f1和f2),它们适用于给定的结构.这两个函数几乎相同,但它们改变了它们正在运行的成员,有时操作是一个值的倒数等等...(这个例子是对真实程序的过度简化).
我想避免使用条件和重载函数来实现此行为.你知道更清洁,更惯用的方式吗?我错过了这段代码中的任何问题吗?
typedef struct thing_t {
double A;
double B;
} THING;
double get_A(const THING &t) {
return t.A;
}
double get_B(const THING &t) {
return t.B;
}
double convert(const THING &t, auto first, auto then) {
return first(t) / then(t);
}
double f1(const THING &t) {
return convert(t, get_A, get_B);
}
double f2(const THING &t) {
return convert(t, get_B, get_A);
}
int main() {
THING t = {1.0, 2.0};
std::cout << f1(t) << std::endl;
std::cout << f2(t) << …Run Code Online (Sandbox Code Playgroud) 我是Haskell的新手 - 以及函数式编程 - 我想知道如何在Haskell中编写这样的函数.我已经习惯了命令式语言,但是现在处理haskell中的递归对我来说是难以捉摸的.请注意,我知道奇数的总和可以用n ^ 2完成(即3个第一个奇数的总和1 + 3 + 5 = 9 = 3 ^ 2),但想法是学习函数式编程的递归.
另外,我这样做是代数研讨会的一部分,我们还没有看到太多.我需要一种方法来解决它只有递归.
任何提示?谢谢!