멤버 함수내에서 다른 멤버함수를 포인터를 이용해서 호출하려합

inootis의 이미지

멤버 함수내에서 다른 멤버함수를 포인터를 이용해서 호출하려합니다.

인터넷..을뒤져;; 찾은것 같은데...에러를 발생하네요;

잘못된코드일까요?.....잘못된 코드면 어떻게 해야 원하는 결과를 얻을수 있을까요?

class test
{
	public :
		void funcs()
		{
			std::cout << "called";
		}

		void call()
		{
			void (test::*pFunc)();

			pFunc=test::funcs;

			(this->*pFunc)();
		}
};

test a;

a.call();
charsyam의 이미지

클래스 안에서는 static으로 선언된 함수가 아닌이상은

함수포인터를 쓸 수 없는 걸로 압니다. 그럼 고운 하루 ^^;

=========================
CharSyam ^^ --- 고운 하루
=========================

inootis의 이미지

charsyam wrote:
클래스 안에서는 static으로 선언된 함수가 아닌이상은

함수포인터를 쓸 수 없는 걸로 압니다. 그럼 고운 하루 ^^;

웁; 정녕 없는건가요 ㅜㅠ;

clhitter의 이미지

virtual이 아닌 이상 static이 아닌 함수라도 함수 포인터로 쓸 수 있는 것으로 알고 있습니다.

원래 코드에서

pFunc=test::funcs;
->
pFunc=&test::funcs;

이렇게 바꾸니까 에러 나지 않던데요? (gcc 2.95.2)

inootis의 이미지

clhitter wrote:
virtual이 아닌 이상 static이 아닌 함수라도 함수 포인터로 쓸 수 있는 것으로 알고 있습니다.

원래 코드에서

pFunc=test::funcs;
->
pFunc=&test::funcs;

이렇게 바꾸니까 에러 나지 않던데요? (gcc 2.95.2)

컴파일러가 그렇게 하라는 말이었군요;; 감사합니다.

혹시..클래스와 관련해서...함수포인터에 관해 설명해 있는 싸이트...알고계시나요?

clhitter의 이미지

c++을 제대로 활용하고 싶으시다면 function pointer 보다는
functional object (일명 functor)에 대해 공부해보세요
이걸 잘 알아두면 STL의 algorithm을 쓸때 유용하게 사용할 수 있습니다.
bjarne씨가 지으신 The C++ Programming Language 등의 책에 보면 잘 나와있습니다.