ecsimsw

Function pointer / 함수 포인터 본문

Function pointer / 함수 포인터

JinHwan Kim 2019. 4. 20. 19:42
typedef OpKernel* (*Factory)(OpKernelConstruction*);
- 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(); }

'Language > C++, C#' 카테고리의 다른 글

Explicit  (0) 2019.04.23
static_cast / reinterpret_cast  (0) 2019.04.23
object factory / 오브젝트 팩토리  (0) 2019.04.11
std::initializer_list / 생성자 리스트  (0) 2019.04.05
scope resolution operator / namespace  (0) 2019.04.02
Comments