如何将带有非类型模板的继承类传递给它在C ++中的父引用

时间:2017-03-29 04:06:43

标签: c++ class sorting inheritance

考虑以下代码:技术上,集合是一个带有sort方法的向量。

// All views extend this base template
doctype html
html
   head
   body
      h1 This is my base template
      if(authenticated)
         // Child templates overwrite this block with their content
         block content
      else
         // Otherwise, prompt user to log in
         a(href='/login') login

这是class sortType

template<class T>
class collection
{
public:
  std::vector<T> vec;
  void sort(sortType& U, bool compare(T, T))
  {
      U.doSort(vec, compare) ;
  } 
} 

以下代码是我想要使用的一些不同的排序方法

template<class T>
class sortType
{
 protected:
   doSort(std::vector<T>&,  bool compare(T, T));
} 

compare是一个函数看起来像这样:

template<class T>
class insertionsort : public sortType
{
 public: 
   doSort(std::vector<T>&, bool compare(T, T))
    {
      //code of insertion sort
    } 
} 

template<class T>
class quicksort : public sortType
{
 public: 
   doSort(std::vector<T>&, bool compare(T, T))
    {
      //code of quicksort
    } 
} 

我想像以前一样使用上一课:

template <class T>
bool greater( T l, T r) 
{
    if (l<r) return true;
    return false;
} 

不幸的是,visual studio宣布我无法将insertionsort类传递给sortType类。我怎么能修复它并使用之前的那些东西。 感谢帮助

1 个答案:

答案 0 :(得分:0)

这里:

void sort(sortType& U, bool compare(T, T))

您正在尝试传递sortType,但它是一个模板;实际类型为sortType<T>,因此函数签名应为

void sort(sortType<T>& U, bool compare(T, T))

还有,评论中提到的 n.m。