2014-04-21 3 views
0

두 클래스가 있습니다.두 번째 클래스 멤버 함수에서 first class 멤버 함수를 thread C++ 11에서 호출하는 방법

class first 
{ 
    public: 
     int sum (int a, int b) 
     { 
      return a+b; 
     } 
}; 

class second 
{ 
    private: 
     std::thread t1, t2; 
     int sum (int a, int b, int c) 
     { 
      return a+b+c; 
     } 
    public: 
     void execute() 
     { 
      t1 = std::thread (&second::sum, this, 10,20,30);    //calling same class function 
      t2 = std::thread (&first::sum, /*what will be here*/, 10,20); // trying to call another class function 
     } 

}; 

int main() 
{ 
    second s; 
    s.execute(); 
    return 0; 
} 

내가 대신 전달해야 무엇/* 여기에 무슨 */

당신은 first의 인스턴스 (또는 적어도 오래 살 것이다 first 인스턴스에 대한 포인터를 필요

답변

4

스레드) :

: 포인터를 전달

first f; 
t2 = std::thread (&first::sum, f, 10,20); 

:

는 인스턴스를 전달

// assume m_f is a data member of type first 
t2 = std::thread (&first::sum, &m_f, 10,20); 

선택 대상은 필요한 의미에 따라 다릅니다. 이 경우 first::sum이 비 정적 멤버 함수 (또는 멤버 함수)가되는 것은 거의 없습니다.

당신이 first::sumstatic 구성원으로 선택한 경우, 다음 first의 어떤 인스턴스가 필요하지 않을 것이다 :

t2 = std::thread (&first::sum, 10, 20); 
+0

당신은 내가 클래스 초에 첫 번째 클래스의 인스턴스를 만들 필요가 말하는 의미를? –

+0

@DeveshAgrawal 네, 'add'는 비 정적 멤버 함수입니다. 따라서'first'의 인스턴스가 필요합니다. – juanchopanza

+1

'std :: thread' [does not] (https://stackoverflow.com/a/21066704/241631)는'reference_wrapper '를 특별히 처리합니다. 조나단의 대답 위에 케이시의 긴 설명을 참조하십시오. – Praetorian

관련 문제