2017-12-14 12 views
-2

알 수없는 형식 및 알 수없는 매개 변수가있는 람다 함수를 사용하는 생성자를 만들려고합니다. 필자는 매개 변수가없는 함수를 전달하기 위해이 함수를 사용할 수있게 만들었지 만 함수에 매개 변수를 추가하려고하면 인수 목록과 일치시키는 방법을 이해할 수 없습니다.알 수없는 형식 및 알 수없는 매개 변수가있는 생성자에 람다 함수를 전달하는 방법

CPP 파일

#include "TestBind.h" 

using namespace std; 
int main() 
{ 
    int i = 10; 

    function<int(int, int)> Multiply = [&i](int a, int b) 
    { 
     i = 11; 
     return i * a * b; 
    }; 

    g<int,int,int> n (Multiply); //problem line 
    n.runFunc(); 
    cout << i << endl; 

    cin.clear(); 
    cin.ignore(); 
    cin.get(); 
} 

시간 파일

#include <functional> 
#include <iostream> 

using namespace std; 

template <typename ReturnType, typename... Args> 
class g 
{ 
public: 
    g(Args... args, function<ReturnType(Args...)> func) { f = func; }; 
    void runFunc() { 
     cout << f() << endl; 
    }; 
    ~g() {}; 

private: 
    function<ReturnType(Args...)> f; 
}; 

나는이 here 대답되었음을 확신합니다,하지만 난 솔루션을 구현하는 방법을 이해하지 않습니다.

내가 실제로하려는 일을 확장해야합니다. 나중에 OpenGL에서 버튼을 만드는 데 사용될 클래스를 만들려고합니다. 이 단추에는 알 수없는 반환 형식 및 알 수없는 인수 (유형 및 양)가있는 함수가있을 수 있습니다. 나는 어디에서 그런 요구 사항을 가진 함수를 전달할 수있는 객체를 만든 다음 (버튼을 클릭 한 것처럼) 함수를 실행하는 테스트를 현재 만들고자한다. 일단 이것을 가지고 있으면 이미 opengl 측을 처리했다. 그냥 개념 증명을하려고 애쓰는 것입니다. 나는 캡쳐의 사용이 유익 할 것이라고 생각했기 때문에 std :: function/lambda 함수를 사용하고있다.

+0

힌트 : : 아마도이 같은 뭔가를 찾고있는 함수 호출에 전달 된 매개 변수 위치를 확인 – Zereges

+0

['표준 : reference_wrapper'] (HTTP (주, 그들은이되지 않습니다) : //en.cppreference.com/w/cpp/utility/functional/reference_wrapper)이 작업을 수행합니다. 그걸 영감으로 사용할 수 있습니다. –

+0

@DavidG 다른 2 (C++ 및 lambda)를 추가 할 때 실수로 추천 섹션에서 클릭해야합니다. –

답변

0

뭘 하려는지 명확하지 않습니다.

class g 
{ 
public: 
    template <typename F, typename... Args> 
    g(F&& func, Args&&... args) { 
     f = [=]() { std::cout << func(args...) << std::endl; }; 
    } 
    void runFunc() { 
     f(); 
    }; 

private: 
    std::function<void()> f; 
}; 

Demo