獲取I型有以下情形:從類成員
template< typename Type >
class FooBar
{
public:
std::vector<Type> bar;
};
,我想要得到的Type
,認爲這將是可能的:
using vt = typename FooBar::bar::value_type;
,但我得到:沒有在 ..編譯器錯誤中名爲'bar'的類型。
獲取I型有以下情形:從類成員
template< typename Type >
class FooBar
{
public:
std::vector<Type> bar;
};
,我想要得到的Type
,認爲這將是可能的:
using vt = typename FooBar::bar::value_type;
,但我得到:沒有在 ..編譯器錯誤中名爲'bar'的類型。
首先,你不能查看FooBar
,因爲這不是一種類型。這是一個模板。要獲得類型,您需要「應用」模板:某些類型的FooBar<T>
T
。如果您不想硬編碼T
,則還需要製作vt
模板。
template<typename T>
using vt = typename decltype(FooBar<T>::bar)::value_type;
在您的代碼中,bar
是成員字段的名稱。要訪問相應類的「內容」,您需要獲取它的類型。這是使用decltype
完成的。
的作品,謝謝:) – Roby
只需使用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;
}
}
提示:*哪* FooBar? – Quentin
@Roby,你究竟想要做什麼?你在哪裏申報vt? –
您也可以在'FooBar'中添加'using value_type = Type;'來允許'FooBar :: value_type' –
Jarod42