클래스 멤버 함수 포인터 배열 사용하기

함수 포인터 관련 검색을 하면 C 버전이 많이 나오고, 배열 타입을 사용하는 경우는 별로 없어서 공유한다.
(사실 최신 C++에서는 std::function을 사용하면 되기 때문에 이걸 사용하지 않아도 된다)

선언

bool(TEST::*m_pFunc[4])(const int, bool);

멤버 함수 연결

TEST()
{
	m_pFunc[0] = &TEST::func1;
	m_pFunc[1] = &TEST::func2;
}

함수 포인터 배열 호출

bool IsTest(int i) { return (this->*m_pFunc[i])(1, false); }

아래는 예제 코드이다.

#include <iostream>

class TEST
{
public:
	TEST()
	{
		m_pFunc[0] = &TEST::func1;
		m_pFunc[1] = &TEST::func2;
	}

	bool(TEST::*m_pFunc[4])(const int, bool);

	bool IsTest(int i) { return (this->*m_pFunc[i])(1, false); }

private:
	bool func1(const int a, bool isFlag) { return true; }
	bool func2(const int a, bool isFlag) { return false; }
};


int main()
{
	TEST test;

	std::cout << test.IsTest(0) << std::endl;
	std::cout << test.IsTest(1) << std::endl;

	return 0;
}





예제 코드


이 글은 2016-12-16에 작성되었습니다.