【问题标题】:c++: C2783 error instanting class templatec++: C2783 错误实例化类模板
【发布时间】:2013-12-04 02:12:11
【问题描述】:

请原谅我的英语不好……我正在开发自己的 STL,但我在使用模板时遇到了一些问题。 这是我的 List 类的主要结构:

List.h

template <class T, class N>
class List{

   public:
          //public methods

   private:
          //private methods
}

好的,现在我需要实现一个成员函数“sort”,它将对列表的元素进行排序,但是在这个排序函数中,我需要实例化一个 List 对象。 我找到了以这种方式在不同模块中实现该功能的解决方案:

AuxiliaryFunction.h

#include<List.h>
template <class List>
void sort(Lista & l){
   List A; //Works fine!
   ..
}

但是这样我必须通过这样做来调用排序函数:

sort(ListObject);

而不是

ListObject.sort();

除了使用 List 类的成员函数外,我怎样才能做同样的事情? 如果 List 类是像下面这样的抽象类,会有什么不同?

 template <class T, class N>
    class List{

       public:
              typedef T ElemType;
              typedef P position;

              virtual void create() = 0;
              virtual bool empty() = 0;
              ..
              void merge(Lista< T, N > &, Lista< T, N > &);
              ...
       private:
              //private methods
    }

模板模板参数可以作为解决方案吗?我试着做这样的事情

 template <class T, class N>
    class List{
         ...
         template <template <class T,class N> class List> sort(){
              List A;
              ..
         }
    }

但是当我写的时候出现一个 C2783 错误('不能为 List 推断模板参数')

ListObject.sort();

任何形式的帮助将不胜感激:)

【问题讨论】:

标签: c++ templates stl class-template


【解决方案1】:

听起来您正在寻找这样的东西:

template <class T, class N>
class List{
     ...
     void sort(){
          List<T, N> A;
          ..
     }
}

【讨论】:

  • 是的,但是这样我得到了一个错误 C2259: 'List': cannot istancate abstract class
猜你喜欢
  • 2014-04-20
  • 2019-11-17
  • 1970-01-01
  • 2012-11-28
  • 2012-11-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多