가능한 중복 :
How do function pointers work?함수를 매개 변수로 전달하는 방법은 무엇입니까?
가 어떻게 매개 변수로 함수를 전달합니까?
다른 클래스의 함수를 매개 변수로 전달할 수도 있습니까 (객체를 사용합니까?)?
가능한 중복 :
How do function pointers work?함수를 매개 변수로 전달하는 방법은 무엇입니까?
가 어떻게 매개 변수로 함수를 전달합니까?
다른 클래스의 함수를 매개 변수로 전달할 수도 있습니까 (객체를 사용합니까?)?
함수 포인터를 전달해야합니다. 구문은 너무 어렵지 않고 멋진 페이지 here이 있으며 c 및 C++에서 함수 포인터를 사용하는 방법에 대한 철저한 분석을 제공합니다. 해당 페이지 (http://www.newty.de/fpt/fpt.html)에서
://------------------------------------------------------------------------------------
// 2.6 How to Pass a Function Pointer
// <pt2Func> is a pointer to a function which returns an int and takes a float and two char
void PassPtr(int (*pt2Func)(float, char, char))
{
int result = (*pt2Func)(12, 'a', 'b'); // call using function pointer
cout << result << endl;
}
// execute example code - 'DoIt' is a suitable function like defined above in 2.1-4
void Pass_A_Function_Pointer()
{
cout << endl << "Executing 'Pass_A_Function_Pointer'" << endl;
PassPtr(&DoIt);
}
고마워, 내가 집에 갈 때 이것을 시도 할 것이다. – user1338743
두 가지 방법이 있습니다.
하나는 함수 포인터 @dusktreader 개요입니다.
다른 하나는 functors 또는 함수의 매개 변수로 operator()
을 오버로드하는 클래스를 정의한 다음 함수 인스턴스를 사용하고 클래스 인스턴스를 전달하는 것입니다.
나는 항상 후자를 더 직관적이라고 생각했지만, 둘 중 어느 쪽이든 할 것이다.
Functor는 템플릿 기능에 전달 될 때만 작동한다. –
@MarkRansom 함수 객체는 '가상'을 통해 공통 기반과 동적 디스패치를 사용할 수도 있습니다. – justin
@MarkRansom은'std :: functions' 일 때가 아닙니다. – juanchopanza
함수 포인터 외에도 std::function and std::bind (또는 C++ 11이없는 경우 boost
등가)을 사용할 수 있습니다. 이들은 polimorphic 기능 래퍼를 제공, 그래서 당신은 두 가지의 int를 취하는 std::function
받아 반환이 기능을, 정의 같은 물건을 할 수있는 더블 :
double foo(std::function<double(int, int)> f) {
return 100*f(5,89);
}
은 다음과 일치 아무것도 전달할 수있는 서명, 예를 들어 :
struct Adder {
double bar(double a, double b) { return a+b;}
};
int main() {
using namespace std::placeholders;
Adder addObj;
auto fun = std::bind(&AdderC::bar, &addObj, _1, _2); // auto is std::function<double(int,int)>
std::cout << foo(fun) << "\n"; // gets 100*addObj.bar(5,89)
}
이들은 모두 강력한 기능을 사용하기 쉽고, 쓸모없는 예제로 오해하지 마십시오. 일반 함수, 정적 함수, 멤버 함수, 정적 멤버 함수, 펑터를 래핑 할 수 있습니다 ...
콜백을 조회합니다. –
다른 방법으로 매개 변수를 전달하는 것과 같은 방법입니다. 전달하고자하는 함수의 이름 뒤에 괄호 안에 이름을 넣는다. 어느 부분에 문제가 있습니까? 흠. 아마 그 제목이 정말로 그것을 모두 말하지 않았을까? –