2013-03-12 6 views
1

함수가 int func(int x, int y, int z)이고 다른 함수 내에서 10 번 호출해야한다고 가정합니다 (예 : int runge(int, ... , int func(int a, int b))). 내가이 일을하는 간단한 방법을하고 싶습니다, 내가 10 개 기능을 만들 수 있습니다 즉더 큰 함수에서 더 작은 함수를 어떻게 만듭니 까?

int runge1(int a, int b) {return func(1, a, b);} 

을 알고 있지만.

for(int i=0; i<10; i++) 
    { 
    //func would have two variables input into it, variable1, variable2 
    int (*func)=func(i, variable1, variable2); 
    } 
+2

부스트 '를 참조하십시오 :: 바인드 '. – Morwenn

+1

죄송합니다. 다른 함수 내에서 함수를 10 번 호출하는 것에 대한 예제는 전혀 설명하지 않습니다. 아마도 좀 더 확장하면 (즉, i = 1,2,3, ...), 질문이 더 명확해질 것입니다. –

+0

도움을 주셔서 감사합니다. 제 질문에 대해 불분명합니다. 정답을 수락하기 위해 잠시 기다려야하지만 도움을 주셔서 감사합니다. –

답변

4

당신은 std::bind 찾고 :이 func의 첫 번째 인수에 i을 결합하고 결합되지 않은 나머지 인수를 떠나

std::function<int(int,int)> f = std::bind(&func, i, std::placeholders::_1, std::placeholders::_2); 

C++에서

, 여기에 좋은 예입니다. 당신은 다음과 같이 f를 호출 할 수

f(1, 2); 

당신은 당신이에 새로 바인딩의 모든 기능을 밀어 수 있습니다하려는 경우 std::vector :

using namespace std::placeholders; 
std::vector<std::function<int(int,int)>> funcs; 
for (int i = 0; i < 10; i++) { 
    funcs.push_back(std::bind(&func, i, _1, _2)); 
} 

당신이없는 경우 C++ (11) , boost::bind 사본이 있습니다.

1

나는 당신의 설명이 반드시 100 % 아니지만, 당신이 기능을 카레 찾고있는 것 같습니다 : 는 기본적으로 나는 같은 함수 포인터를 만들려고합니다. How can currying be done in C++?

+0

그 예제는 다소 오래되었고 거기에 언급 된 바인더는'std :: bind'와 lambdas를 갖는 새로운 표준으로 사용되지 않습니다. –

0

난 당신이 std::function, 람다를 알고 싶어 어쩌면 std::bind 확신 :

int func(int x, int y, int z); 

typedef std::function<int(int,int)> FuncT; 
std::array<FuncT, 10> functions; //or whatever container suits your needs 
for (int i = 0; i < 10; ++i) 
{ 
    functions[i] = [=](int a, int b) { return func(i,a,b); }; //with lambdas 
    functions[i] = std::bind(func, i, std::placeholders::_1, std::placeholders::_2); //with bind 
} 

(... 내가 람다를 선호하지만, 그건 취향의 문제이다)

관련 문제