2014-10-12 2 views
2

다음은 나에게 아무 것도 출력하지 않습니다. 알다시피, initializer_list의 수명은 매우 제한되어 있으며 initializer_list를 복사해도 기본 요소가 복사되지 않습니다. 나는 값으로 지나가는 것이 움직일 수 있다고 생각했고, 심지어 명백한 움직임조차도 작동하지 않는다. 참조에 바인드 할 수없고 별도의 참조 변수를 사용하면 여기에서 작동하지 않습니다. 벡터를 사용하더라도 작동하지 않습니다 ??initializer_list는 어떻게 복사합니까?

template <typename T, typename Pred> 
void for_each(T t, const Pred& pred) 
{ 
    auto local = std::vector<typename T::value_type>{t.begin(), t.end()}; 

    for (typename decltype(local)::size_type i = 0; i < local.size(); ++i) 
     pred(*(i + std::begin(local))); 
} 

void pred(char c) 
{ 
    std::cout << c << " "; 
} 

int main() 
{ 
    auto arr { 1, 2, 3 }; 
    for_each(arr, pred); 

    return 0; 
} 
+1

당신은 아무것도 볼

또한 단지 함수 템플릿을 작성할 수 0x01, 0x02 및 0x03 모두 인쇄 가능한 문자가 아니기 때문에 – sp2danny

답변

3

귀하의 술어는 잘못된 것입니다 : 당신은 그것을 int 값이 아닌 char을 통과하므로 술어는 인쇄되지 않습니다는 0x02 및 0x03으로 문자 0x01로, 전달됩니다.

void pred(int c) 
{ 
    std::cout << c << " "; 
} 

을 그리고 당신의 코드는 이제 fine 작동 :

당신은 사용할 수 있습니다.

template<typename T> 
void pred(T c) 
{ 
    std::cout << c << " "; 
} 

참고 :

과 함께 루프를 작성하는 고려이-범위 :

for (auto&& v : t) 
    pred(v); 
관련 문제