如何从类模板派生

How to derive from class template

本文关键字:派生      更新时间:2023-10-16

我正在阅读有关模板的书,并在以下示例中找到了突出显示模板关键字的使用的示例。我尝试以下示例,但它给出了错误

令牌之前的预期模板名称<D类:公共外壳::模板>

#include <iostream>
using namespace std;
template <typename T>
class shell {
public:
  template<int N>
  class in {
     public :
         template <int M>
         class Deep {
             public:
                 virtual void f() { cout << endl << "NO" << endl; }
         };
      };
    };

template <typename T, int N>
class weird
{
    public:
        void case1(typename shell<T>::template In<N>::template Deep<N>* n)
        {
           class D : public shell<void>::template In<N>::template Deep<N>
           {
               public :
               virtual void f() { cout << endl << "N" << endl;}
            };
            n = new D(); 
            n-> f();
         }
 };
int main() {
    weird<void,1> obj;
    obj.case1(NULL);
return 0;
}

提前致谢

您在其中一个类中使用了错误的大小写:

void case1(typename shell<T>::template In<N>::template Deep<N>* n)
//                                     ^^^^^

应该是:

void case1(typename shell<T>::template in<N>::template Deep<N>* n)

其他一切都很好。