【发布时间】: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