如何从类模板派生

时间:2014-12-22 13:10:14

标签: c++

我正在模板上阅读本书,并在下面的示例中找到了强调模板关键字使用的示例。一世 尝试下面的例子,但它给出了错误

<之前的预期模板名称代币 D类:public shell :: template In :: template Deep                                        ^

#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;
}

提前致谢

1 个答案:

答案 0 :(得分:1)

你在其中一个课上使用了错误的案例:

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

应该是:

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

其他一切都很好。