다음 코드는 컴파일되지만 decltype을 사용하지 않고이 코드를 작성하는 방법을 모르겠습니다. 나는 실패한 시도를 decltype을 사용하는 줄 아래의 주석 처리 된 줄에 작성했습니다.back_inserter (container) 유형은 무엇입니까
#include <iostream>
#include <iterator>
#include <vector>
using namespace std;
template<class Out>
class Fill{
public:
Fill(){}
void fill(Out x){
for(int i = 0; i != 10; i++)*x++ = i;
}
};
int main(){
vector<int> v;
Fill<decltype(back_inserter(v))> f; //works
//does not work
//Fill<vector<int>::iterator> g;
//does not work
//Fill<back_insert_iterator<vector<int>> h;
f.fill(back_inserter(v));
copy(v.begin(),v.end(),ostream_iterator<int>(cout," "));
}
감사
수레 쉬가
당신이 제안한대로 꺾쇠 괄호로 묶어도, 컴파일 오류가 발생합니다 :'error : template argument 1 is invalid'. 나는'-std = C++ 0x' 옵션으로 g ++ 4.4를 사용했다. 그래서 바로 각진 괄호를 유지했습니다. 내 요구 사항은 출력 반복기를 받아들이고 STL'copy' 알고리즘 등에서 볼 수있는 함수를 작성하는 것입니다. 그래서 어디서 잘못 될까요? – suresh