2015-07-10 72 views
0

獲取I型有以下情形:從類成員

template< typename Type > 
class FooBar 
{ 
    public: 
    std::vector<Type> bar; 
}; 

,我想要得到的Type,認爲這將是可能的:

using vt = typename FooBar::bar::value_type; 

,但我得到:沒有在 ..編譯器錯誤中名爲'bar'的類型。

+2

提示:*哪* FooBar? – Quentin

+0

@Roby,你究竟想要做什麼?你在哪裏申報vt? –

+0

您也可以在'FooBar'中添加'using value_type = Type;'來允許'FooBar :: value_type' – Jarod42

回答

2

首先,你不能查看FooBar,因爲這不是一種類型。這是一個模板。要獲得類型,您需要「應用」模板:某些類型的FooBar<T>T。如果您不想硬編碼T,則還需要製作vt模板。

template<typename T> 
using vt = typename decltype(FooBar<T>::bar)::value_type; 

在您的代碼中,bar是成員字段的名稱。要訪問相應類的「內容」,您需要獲取它的類型。這是使用decltype完成的。

In action here.

+0

的作品,謝謝:) – Roby

0

只需使用FooBar作爲幫助:

template <typename Type> 
class FooBar { 
public: 
    using ID = vector<Type>; 
}; 

在另一個模板功能,您可以使用助手來獲取類型:

// vector of int 
typename FooBar<int>::ID vec; 

小例子:

template <typename T> 
void func() 
{ 
    typename FooBar<int>::ID vec; 
    for (int i = 0; i != 5; ++i) { 
     vec.push_back(i); 
     cout << vec[i] << endl; 
    } 
}