[英]c++ class member variable of the nested template type
我想創建一個模板化的 class ( C2
),使用 class 作為模板,它也是模板化的( C1
)。 此外,在C2
中創建一個相同類型的變量,用作 class C1
的模板。
template <typename Ttype>
class C1{
public:
Ttype var;
}
template<class T> //class T always templated
class C2{
public:
T x;
// ? y; << variable of template type of the class T
}
int main()
{
C1<int> instanceInt;
C1<long> instanceLong;
C2<C1<int>> foo; //C2.y should be int
}
我對 class C2
的初始實現如下,但是它會導致error: identifier "Ttype" is undefined
。 為什么編譯器看不到 Ttype?
template <template <class Ttype> class Tparam>
class C2 {
public:
Tparam<Ttype> x;
const Ttype y;
};
所以我的工作,但不是很好的解決方案是使用 typedef。
template <typename Ttype>
class C1{
public:
typedef Ttype Ctype
Ttype var;
}
template<class T>
class C2{
public:
typedef typename T::Ctype Ttype;
T x;
Ttype y;
}
我希望應該有更好的實現相同的功能。 在那兒?
第二種方法可以修復,但是,第三種方法也不錯。
template <typename Ttype>
class C1
{
public:
Ttype var;
};
template<template <class Ttype> class Tparam, typename T>
class C2
{
public:
Tparam<T> x;
T y;
};
void foo()
{
C2<C1,int> bar;
}
您可以使用模板專業化
template <typename>
class C2;
template <template <typename> class C, typename T>
class C2<C<T>>
{
public:
C<T> x;
T y;
};
或者您也可以開發自定義類型特征以從類型中提取模板參數
template <typename>
struct get_tmpl_param;
template <template <typename> class C, typename T>
struct get_tmpl_param<C<T>>
{ using type = T; };
template <typename T>
using get_tmpl_param_t = typename get_tmpl_param<T>::type;
所以你的 class C2
(沒有專業化)可以
template <typename T>
class C2
{
public:
T x;
get_tmpl_param_t<T> y;
};
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.