2013-02-15 2 views
2

파생 클래스로 함수를 재정의하는 것처럼 함수를 정의하거나 정의 할 수 있습니까?다른 함수로 멤버 함수 지정

하지만 현재로서는 수업에서 범위를 벗어났습니다.

나는 다음과 같은 의미 :

//class.h 

class MClass 
{ 
public: 

    void function(); // this is the function I am referring to. 
} 
//class.cpp 

void MClass::function() { } 

//file1.cpp 
MClass mclass; 


void globalFunction() { } 

mclass.function = globalFunction; //is this even possible? 
+0

예, 그렇지만 비슷하지는 않습니다. –

+0

무엇을 얻으려고합니까? 아니면 해결하려는 문제가 무엇입니까? – hmjd

+0

@hmjd 잘이 버튼 객체를 만들고 있는데, 사용하기 아주 간단하게 만들고 싶습니다. 따라서 버튼이하는 기능을 할당하면 나를 위해 매우 간단하게 사용할 수 있습니다 :) – mr5

답변

1

function()은 실제 기능이며, 대신 function Callback을 원합니다. on ideone

#include <functional> 
class MClass 
{ 
public: 
    std::function<void(void)> func_ptr; 

    void setFuncPtr(const std::function<void(void)>& ptr) 
    { 
    func_ptr = ptr; 
    } 

    void callFuncPtr() 
    { 
    func_ptr(); 
    } 
}; 

당신은 어떤 callabe의 오브제

MClass m; 
m.setFuncPtr(globalFunction); // set to standalone function 
m.callFuncPtr(); 

// set lambda to it 
m.setFuncPtr([](){ std::cout << " do something " << std::endl; }); 
m.callFuncPtr(); 

func_ptr을 설정 또는 또한 기능 매개 변수를 전달할 수

struct Test 
{ 
    void print() { std::cout << "Test::print" << std::endl; } 
}; 
Test t; 
m.setFuncPtr(std::bind(&Test::print, t)); 
m.callFuncPtr(); 

다른 개체에 바인딩 수 :

샘플 프로그램을 참조 std :: bind 및 placeholder를 사용하여.

+0

거기에서 가장 빠르고 좋은 구현 무엇입니까? – mr5

+1

호출 가능 객체가 함수보다 빠르다고 가정하면 컴파일러는 코드를 인라인 할 수 있습니다. – billz

+0

'#include '? – billz

0

두 가지 방법이 있습니다 :

  • C++ 03 - 당신은 함수 포인터를 사용할 수의 C +에서

    class MClass 
    { 
    public: 
    
        void (*function)(); 
    }; 
    void globalFunction() 
    { 
        // ... 
    } 
    
    MClass obj; 
    mclass.function = globalFunction; 
    
  • +11 당신은 펑터를 사용할 수 있습니다 :

    class MClass 
    { 
    public: 
    
        std::function<void()> function; 
    }; 
    void globalFunction() 
    { 
        // ... 
    } 
    
    MClass obj; 
    mclass.function = globalFunction; 
    
+6

그건 람다가 아니야. – ecatmur

+0

예 C++ 11 예제는 범용 다형 함수 래퍼라고 부르며 비공식적으로 펑터 (수학 용어와 혼동하지 말것)라고 불린다. – thang

+0

내 std 라이브러리에는 std :: function 및 std :: bind가 없습니다. msvs 2010 Professional Edition을 사용하고 있습니다. – mr5

관련 문제