2014-04-08 3 views
0

클로저 모양의 개체에서 함수에 전달 된 매개 변수를 캡처하려고합니다. 주요 목표는 모든 유형의 매개 변수를 캡처 (사본이 아닌 참조 저장)하는 것입니다. 여기C++ 11을 사용하여 효율적인 클로저를 만드는 방법은 무엇입니까?

(. 여기 why의)에만이 매개 변수 저장을 한 쌍의 캡처 매우 단순화 된 버전입니다 :

main.cpp: In instantiation of 'void foo(T1&&, T2&&) [with T1 = basic_string<char>&; T2 = basic_string<char>&]': 
main.cpp: error: no matching function for call to 'forward(basic_string<char>&)' 
... 
: 불행하게도이 g ++ 4.7.2로 컴파일되지 않습니다

template<typename T1, typename T2> 
void foo(T1&& t1, T2&& t2) 
{ 
    pair<T1&&, T2&&> p(forward(t1), forward(t2)); // Capture parameters -- doesn't work 
    cout << p.first << "," << p.second << endl; 
} 

int main() 
{ 
    string s = "hey"; 
    foo("hello", "world"); 
    foo(1, 2); 
    foo(s, endl); 
    return 0; 
} 

위의 컴파일을 수행하기 위해 p를 선언하고 초기화하는 방법은 무엇입니까?

답변

1

당신은 endl의 유형을 알아낼 수 없습니다 std::forward

pair<T1&&, T2&&> p(forward<T1>(t1), forward<T2>(t2));

컴파일러에 대한 명시 적 유형을 지정해야 하나 당신이 그런 식으로 그것을 사용하려면, 그렇다면 그들은해야합니다 그래도 endl<char, char_traits<char>>으로 지정되면 '\n'을 사용해야합니다.

관련 문제