2017-10-21 7 views
1

저는 C++을 처음 접했고 C++ 프로그램을 파이썬으로 번역하려고합니다. 다음 코드의 구문에 대한 혼란 스러워요 :함수의 정의에서 페어 변수들

void function(unsigned(*f)(unsigned st, unsigned hqid)) const{ 
    if(f(st,hiddenControlBitId)){ 
    // code here 
    } 
} 

수있는 사람이 인수로 unsigned(*f)(unsigned st, unsigned hqid)를 통과 무엇을 의미하는지 지적?

사실, 쌍을 사용하여 함수를 호출하려고하면 컴파일 오류 No matching function for call이 발생하므로 std::pair<int,int> f 쌍을 인수로 전달하는 것과 같지 않을 것이라고 확신합니다.

답변

3
unsigned(*f)(unsigned st, unsigned hqid) 

f 2 개 파라미터 thakes 함수 부호 형 모두에 대한 포인터이며, 미 부호 정수를 반환한다. sthqid은 완전히 생략 할 수 있습니다.

:

unsigned foo(unsigned a, unsigned b) 
{ 
    return a + b; 
} 

은 다음 (I 그것 때문에 거기 const하는 방법입니다 가정)이 같은 function를 호출 할 수

사용 예제 : 당신은 예를 들어, 이러한 기능이있는 경우

obj.function(foo); 
0

두 개의 (부호없는) 정수를 반환하는 정수를 의미합니다. 그런 것들에 대한 C의 악명 높은 구문을 설명하는 tools이 있습니다. 여기

+0

컴파일 오류 만 발생시키는 쌍으로 함수를 호출하려고 했으므로 그럴 수 없다고 확신합니다.하지만 그 웹 사이트에 대해 많은 감사를드립니다! – taper

+1

@taper 그의 대답은 최고의 말씨가 아닐 수도 있지만 그는 옳습니다. – bolov

+1

@taper 그것은 하나의'pair '가 아닌 개별적으로 전달되는 두 개의 다른 매개 변수입니다. –

1

functionconst 클래스의 메소드 (const는 non-cl 엉덩이 함수) 하나의 매개 변수 f 입력으로 걸립니다.

f은 2 unsigned 매개 변수를 입력으로 사용하여 unsigned을 리턴하는 비 클래스 함수에 대한 포인터입니다. 예를 들어

이있어서

unsigned addThem(unsigned st, unsigned hqid) 
{ 
    return st + hqid; 
} 

someObj.function(&addThem); 
1
void function(unsigned(*f)(unsigned st, unsigned hqid)) const{ 
    if(f(st,hiddenControlBitId)){ 
    // code here 
    } 
} 

, function()은 (f 명명) 함수에 대한 포인터이며 하나의 인자를 받아 일부 클래스의 멤버 함수 인 것을 형식이 unsigned 인 두 개의 인수를 받아들이고 unsigned을 반환합니다.

foo()이로 정의 된 함수 인 경우;

unsigned foo(unsigned x, unsigned y) 
{ 
     return x + y; // some arbitrary operation on the arguments 
} 

s 경우

다음 멤버 함수, 같은 문과 function()을 갖는 클래스의 인스턴스이고;

s.function(foo); 

foo()입니다. const의 사양이 function()이면 개체 s이 논리적으로 변경되지 않았 음을 의미합니다.