小编jrs*_*jrs的帖子

将函数作为参数传递以避免重复代码

到目前为止,我一直在使用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)

c++ overloading dry c++11 c++14

2
推荐指数
1
解决办法
90
查看次数

总结Haskell中的前n个奇数

我是Haskell的新手 - 以及函数式编程 - 我想知道如何在Haskell中编写这样的函数.我已经习惯了命令式语言,但是现在处理haskell中的递归对我来说是难以捉摸的.请注意,我知道奇数的总和可以用n ^ 2完成(即3个第一个奇数的总和1 + 3 + 5 = 9 = 3 ^ 2),但想法是学习函数式编程的递归.

另外,我这样做是代数研讨会的一部分,我们还没有看到太多.我需要一种方法来解决它只有递归.

任何提示?谢谢!

recursion haskell

1
推荐指数
2
解决办法
1054
查看次数

标签 统计

c++ ×1

c++11 ×1

c++14 ×1

dry ×1

haskell ×1

overloading ×1

recursion ×1