- tensorflow source를 분석하다가 위의 typedef로 Factory가 정의되있는 것을 보고 공부하게 되었다.
-
function pointer
- 함수를 호출한다는 것은 함수가 정의된 메모리의 시작 주소로 pc를 이동시키는 것을 의미한다. 다른 상수 타입의 포인터와 마찬가지로 함수 포인터 단순히 이런 주소를 담는 변수이다.returnType (*fpName) (parmeters) - 위처럼 가리킬 함수의 리턴 타입, 파라미터와 함께 함수 포인터를 선언하고 같은 형태를 갖는 함수를 대입하여 주소를 저장하고, 이를 호출한다.void foo() { cout << "Hi" << endl; } int main() { void (*fp) () = foo; fp(); (*fp)(); } - 포인터 이름의 *다음에 const를 붙이는 것으로 상수 포인터를 선언한다. (포인터와 레퍼런스를 상수 처리하는 것은 중요)returnType (* const fpName) (parmeters) - 함수 포인터 배열을 선언하는 것 역시 똑같다. *fpName 다음에 []으로 인덱스만 표시하고, 호출시에도 마찬가지로 인덱스를 직접 지정하거나 포인터로 위치를 가리킬 수 도 있다.void foo() { cout << "Hi" << endl; } int main() { void(*fpArray[])() = {foo, foo, foo}; (fpArray[0])(); (*(fpArray+1))(); } - typedef을 이용하면 함수 포인트를 일반 변수 타입처럼 정의할 수 있다.typedef void (*fp)(); int main() { fp first_fp; first_fp = foo; first_fp(); }