차례로 함수에 대한 래퍼를 생성하는 템플릿 클래스를 만들려고합니다. 그런 다음 클래스는 래퍼를 결과로 반환합니다. 이 같은 것을 가지고 내가 좋아하는 것std :: function 및 std :: bind와 함께 C++ 템플릿 사용
std::function<void()>task = std::bind(fun1, param1, param2);
std::function<int(int, int)>task = std::bind(fun2, param1, param2);
: 나는 같은 다른 서명, 어떤 기능이 작동 일반적으로 클래스를 가지고 템플릿을 사용하고자하는
을template <typename T1, typename T2>
class A {
A (string param1, string param2) {
// The created wrapper here i.e. 'task' will be returned by the class.
function<T1>task = bind(T2, param1, param2);
}
// Return the created wrapper in the constructor.
function<T1> returnWrapper() {
return task;
}
};
위의 코드는 컴파일 할 수 없기 때문에 거의 의사 코드이며, 내가 찾고있는 것에 대한 아이디어를 제공합니다. 이것에 대한 해결책이 있습니까? 나는 단순히 함수의 서명을위한 템플릿을 사용하는 것 이상의 것이되어야한다고 생각한다. 어떤 도움을 주시면 감사하겠습니다. 가능하다면 임의의 수의 매개 변수를 '바인딩'에 전달할 수 있기를 바랍니다.
이렇게 할 수 있다면 나중에 어떻게 부르겠습니까? – aschepler
완전한 의사 코드를 작성하지는 않았지만 나중에 클래스를 호출 할 수 있도록 클래스가 래퍼를 반환한다는 것이 의도입니다. 이 경우 클래스는 'task'를 반환해야합니다. – Dan
아, 처음에는 모든 종류의 기능을 보유 할 수있는 하나의 공통 비 템플릿 유형이 필요하다고 생각했습니다. 하지만 형식은 여전히 함수 형식 인 'T1'에 의존 할 것으로 보입니다. 'A (string, string)'은 아무 것도 반환 할 수없는 생성자입니다. 'task'는 나중에 액세스 할 수있는 클래스 멤버가 될 것입니다. 아니면'A' 타입의 객체를 직접 호출 할 수 있습니다. – aschepler