2015-05-16 43 views
1

我真的很喜歡python中的functools.partial函數以及這個函數的一般概念。作爲例子,考慮下面的python腳本(我知道,這種情況下不使用functools.partial一個非常有用的例子皮毛,它應該只是一個簡單的例子。)是否有一個C++等價於python的functools.partial

import functools 

def func(a, b, c): 
    sum = a + b + c 
    return sum 


if __name__ == "__main__": 
    func_p = functools.partial(func, a=1, c=1) 
    sum = func_p(b=1) 
    print(sum) 

有沒有用C++的東西它提供了類似的functionallity?

+1

您正在尋找lambdas或'std :: bind'。 (後者可能是「部分」最直接的對應部分) – Columbo

回答

3

C++中的類似工具可能是std::bind。請參閱以下代碼獲取插圖:

#include <functional> 
#include <iostream> 

int func(int a, int b, int c) { 
    return a + b + c; 
} 

int main() { 
    auto func_p = std::bind(func, 1, std::placeholders::_1, 1); 
    std::cout << func_p(1) << std::endl; 
} 
6

是,lambda functions

auto func_p = [](int b){return func(1, b, 1);}; 

func_p(1); 

順便說一句,我個人比較喜歡lambda表達式在Python了。考慮以下幾點:

lambda b: func(b**2, b, b - 3) 

不能用functools完成。爲什麼有兩種不同的解決方案(僅在某些情況下適用)?

應該有一個 - 最好只有一個 - 明顯的方法來做到這一點。

+1

因爲它的工作原因,我給了你一個贊成的答案;雖然看看這個答案,你可能會重新思考你對functools的一般看法http://stackoverflow.com/a/3252425/4408275 – user69453

+0

謝謝,非常有趣的閱讀。 –

+0

@ user69453它**非常有趣。然而,第二個想法是,他所有的觀點都與Python相關,而不是C++。因此,如果在Python中是一種折衷,我仍然沒有看到C++中用於「綁定」的很多用途。 –

相關問題