2012-04-10 38 views
0

我有以下函數創建迭代器的std::vector到另一個容器:會是什麼語法投入decltype(X)在這種情況下,以指定的返回類型

template <typename T, 
      template <typename, typename = std::allocator<T>> class Con> 
std::vector<typename Con<T>::iterator> make_itervec(Con<T>& v) 
{ 
    std::vector<typename Con<T>::iterator> itervec; 
    for (auto i = v.begin(); i != v.end(); ++i) 
    { 
     itervec.push_back(i); 
    } 
    return itervec; 
} 

我想要做什麼是這樣的:

template <typename T, 
      template <typename, typename = std::allocator<T>> class Con> 
auto make_itervec(Con<T>& v) -> decltype(x) // This line 
{ 
    std::vector<typename Con<T>::iterator> itervec; 
    for (auto i = v.begin(); i != v.end(); ++i) 
    { 
     itervec.push_back(i); 
    } 
    return itervec; 
} 

我該怎麼把爲x得到這個工作?

嘗試,但失敗的嘗試:

decltype(std::vector<typename Con<T>::iterator>) 
decltype(std::vector<decltype(v)::iterator>) 

(另外,我不是這方面的專家,所以其他任何建議,意見,歡迎謝謝!)。

回答

3

你可以使用std::vector<decltype(v)::iterator>std::vector<decltype(v.begin())>。請注意,有沒有decltype圍繞std::vector,因爲那個已經是一個類型,而不是一個變量或表達式。 decltype僅用於獲取表達式的類型。

+0

謝謝,你指出我在正確的方向。然而,使用'std :: vector '不起作用(編譯錯誤),但是'std :: vector :: iterator>'did(使用gcc 4.7.0) 。 – 2012-04-10 23:53:20

+0

@ildjarn:不,同樣的錯誤:'期待一個類型,得到decltype(v):: iterator'。 – 2012-04-11 00:08:17

+0

@ildjarn:我正在使用'std :: vector itervec = make_itervec(v);'在我的代碼中,它工作正常,所以絕對不明白爲什麼它不起作用。 – 2012-04-11 00:10:53

3

我認爲你正在做的太這裏工作很多。所有你需要做的是這樣的:

template <typename T> 
std::vector<typename T::iterator> make_itervec(T& v) 
{ 
    std::vector<typename T::iterator> itervec; 

    for (auto i = v.begin(); i != v.end(); ++i) 
    { 
     itervec.push_back(i); 
    } 

    return itervec; 
} 
+0

你絕對是對的。謝謝。 – 2012-04-10 23:56:11

相關問題