2016-06-28 21 views
1

聲明別名模板,我有以下別名模板:如何推進在C++

#include <vector> 

template <typename T> 
using MyVector = std::vector <T>; 

我怎麼能向前聲明MyVector

template <typename T> 
class MyVector; 

對我不起作用。

+2

爲什麼要轉發聲明類型別名? – user2296177

+1

你不能。你想如何使用它? –

+0

將typename更改爲class:'template class MyVector' –

回答

1

您無法轉發聲明使用聲明。
無論如何,你可以宣告着幾分特點因爲它遵循:

#include <type_traits> 
#include <vector> 

template<typename> 
struct MyStuff; 

template<typename T> 
auto f() { return typename MyStuff<T>::MyVector{}; } 

template<typename T> 
struct MyStuff { 
    using MyVector = std::vector<T>; 
}; 

int main() { 
    static_assert(std::is_same<decltype(f<int>()), std::vector<int>>::value, "!"); 
} 
1

您也許能使其成爲一個類型,你將能夠前瞻性聲明閃避:

template <typename T> 
struct MyVector: std::vector<T> {};