2012-03-18 2 views
2

나는 C++ 11 표준과 약간의 실험이 문제를 내놓았다했다 : 당신이 자동으로 함수에 대한 반환 유형을 얻을 수 autodecltype를 사용할 수있는 C++ 11에서decltype은 객체 인스턴스를 필요로

아래의 예를 들어 begin()end() 기능 : 여기

#include <vector> 

template <typename T> 
class Container { 
private: 
    std::vector<T> v; 
public: 
    auto begin() -> decltype(v.begin()) { return v.begin(); }; 
    auto end() -> decltype(v.end()) { return v.end(); }; 
}; 

내 문제는 내가 전에 내 코딩 스타일 반대 국민 선언을 민간 vector<T> v를 선언해야한다는 것입니다. 내 모든 개인 회원 내 공무원을 선언하고 싶습니다. decltype의 표현식은 벡터 멤버 함수 begin()에 대한 호출이고 객체의 인스턴스가 필요하기 때문에 함수 선언 앞에 벡터를 선언해야합니다.

이 방법이 있습니까?

+0

내가 auto''없이 작업을 수행하는 방법을 알고 추가 할 것이나, 질문은'auto'와'decltype'의 사용에 관한 것입니다. – Snps

답변

6

decltype을 전혀 사용하지 않고 반환 유형을 std::vector<T>::iterator으로 설정할 수 있습니다.

당신은 같은 단지 유형의 값을 얻을 수 std::declval을 사용할 수 있지만 자동을 사용하려면 :

auto begin() -> decltype(std::declval<std::vector<T>>().begin()) { return v.begin(); }; 
+0

네,하지만 저는 auto와 decltype을 사용하는 법을 배우려고합니다. 필자가 작성한 코드는 실험하는 것 외에 다른 목적이 없습니다. – Snps

+0

@ snipes83 자동 응답을 사용하여 답변을 업데이트했습니다 –

+0

이것이 내가 찾고 있었던 것입니다. 고맙습니다! – Snps

관련 문제