2012-07-13 2 views
1

이 펑터이다Functors - typedef로 어떻게 사용할 수 있습니까?

class add_x { 

int x; 

public: 
    add_x(int x) : x(x) {} 
    int operator()(int y) { return x + y; } 

}; 

그리고 주에서 나는이 작업을 수행 할 수 있습니다

add_x add10(10); // create my functor 
int i = add10(20); // add 20 and return it 

어떻게 typedef와 펑을 결합 할 수 있습니다? 예를 들어

, 나는이 건너 온 : 나는 바로 여기에 무엇을

typedef int (*myfuncType)(float f, char c1,char c2); 
myfuncType pt2Function = NULL; 

그러나 정의는 무엇입니까? 운영자 ()?

답변

4

함수 포인터는 이름에서 알 수 있듯이 함수 포인터입니다. 본질적으로 overloaded() 연산자가있는 클래스 인 functor를 가리키는 함수 포인터는 사용할 수 없습니다.

당신은 C++ 11 표준 : 기능에 관심이있을 수 :

#include <functional> 

(...) 
std::function<int(int)> fn = add_x(10); 
int i = fn(20); 


편집 : 좋아, 난 당신을 요구하고 무엇을 참조하십시오.

일부 코드는 명확하게 알 수 있습니다.

int fn(float a, char b, char c) { ... } 

(...) 

typedef int (*myFuncType)(float f, char c1, char c2); 

myFuncType ptrToFun = &fn; 

(*fn)(1.0f, 'a', 'z'); 

이 typedef는 "함수에 대한 포인터"유형을 만듭니다. 이 유형의 변수를 선언하면 함수 (예 : & 연산자로 추출)에 대한 포인터를 할당 할 수 있습니다. 예를 들어 다른 함수로 전달하거나 저장 (또는이 함수를 호출) 할 수 있습니다.

std :: function은 함수, 펑터 또는 람다에 대한 포인터를 저장할 수 있고 정상적으로 호출 할 수 있기 때문에보다 유연합니다.

+0

오, 이제 질문이 생깁니다. p – chris

+0

필자는이 론이 포인터와 함수 typedef를 사용하여 펑터를 혼합합니다.그러나 질문은 매우 불분명하다. – Spook

+0

저는 함수 포인터에 펑터를 할당하는 것에 대해 확신합니다. 첫 번째 부분은 훌륭하게 대답합니다. – chris

3

첫 번째 질문 (How can I combine the functor with typedef ?)을 모르겠으므로 대답 할 수 없습니다. typedef은 다른 클래스와 마찬가지로 작동합니다. 두 번째 질문에 대해서는

: 라인

typedef int (*myfuncType)(float f, char c1,char c2); 

는 유형 int (*)(float, char, char)에 이름 (myfunctType) 제공 (읽기 : "는 floatchar 값을받는 함수를 한 다음 int를 반환").

그래서

myfuncType pt2Function = NULL; 

같은 상술 된 기능을 가리킬 수의 변수를 정의하지만, 지금은 NULL 포인터를 설정한다.

1

여기에서 myfuncType은 3 개의 float 매개 변수와 int를 반환하는 함수 포인터를 설명하는 유형입니다. Functor는 operator() 오버로드가있는 클래스 일뿐입니다. 그래서 typedef는 다른 클래스처럼 사용됩니다.

.

관련 문제