簡體   English   中英

c++ class 嵌套模板類型的成員變量

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM