C++ 模板类成员函数专门化?

C++ 模板类成员函数专门化?,c++,templates,member,specialization,C++,Templates,Member,Specialization,关于这个问题,我问了很多问题,但仍然没有找到一个我可以使用的答案 我有一个模板类,声明如下: template <typename Type, int inSize> class sortedVector { public: sortedVector(); int getSize(); int getAmountElements(); bool add(const Type &element);

关于这个问题,我问了很多问题,但仍然没有找到一个我可以使用的答案

我有一个模板类,声明如下:

template <typename Type, int inSize>
class sortedVector
{
    public:
         sortedVector();
         int getSize();
         int getAmountElements();
         bool add(const Type &element);

    private:
        Type *vector;
        int size;
        int amountElements;
};
模板
类分拣机
{
公众:
sortedVector();
int getSize();
int getAmountElements();
布尔添加(常量类型和元素);
私人:
类型*向量;
整数大小;
微量元素;
};
该类应该表示可以存储任何类型元素的排序向量。这是编程课程作业的一部分。到目前为止,赋值中给出的主函数似乎将整数和多边形类型的对象都传递给该函数。多边形是我以前做过的一个类

向量应该按传递的多边形对象的面积排序,当然,也可以按传递的整数的值排序

为此,我想我需要两种不同的add实现(consttype&element)。一个负责将int放入向量的正确位置,另一个负责获取多边形的面积并将其插入向量的正确位置

我们讨论了模板的专门化


我已经尝试了几种不同的方法,但到目前为止都遇到了编译器错误。实现C++的最佳方法是什么?

在C++中,一个保持排序的容器通常会有一个模板参数,用于比较元素,用来确定元素的排序。查看
std::set
,例如:

template<typename Key, typename Compare = std::less<Key>, class Allocator = allocator<Key>>
class set;
所以,这里没有必要使用专门化。你怎么能 无论如何您不可能专门化您所创建的所有类 排序向量可以与一起使用,因为您永远不知道有多少个 他们中的大多数人都在那里

因此,这将使
sortedVector
的声明如下所示:

typedef std::set<int, std::greater<int> > MySet;
template<typename Elem, 
         typename Compare = std::less<Elem> >
class sortedVector {
public:
  // take the functor as a constructor argument in case it cannot be
  // default constructed
  sortedVector(Compare c = Compare()) : cmp_(c) {}

  // ...snip...
  void push_back(const Elem& x) {
    cont_.push_back(x);
    std::sort(begin(cont_), end(cont_), cmp_);
  }

private:
  // trick just use a std::vector as storage and guarantee our sorted invariant
  std::vector<Elem> cont_;

  // we need to store the comparison functor in case it has state
  Compare cmp_;
};

#include<iostream>
int main(){
   long long num;
   std::cin>>num;
   std::cout<<num;
}
模板
类分拣机{
公众:
//将函子作为构造函数参数,以防无法使用
//默认构造
sortedVector(Compare c=Compare()):cmp_(c){
//…剪断。。。
无效推回(常量元素和x){
继续向后推(x);
排序(开始(继续),结束(继续),cmp);
}
私人:
//技巧就是使用std::vector作为存储并保证我们的排序不变量
标准::矢量控制;
//我们需要存储比较函子,以防它有状态
比较cmp;
};
#包括
int main(){
长数;
std::cin>>num;

std::难道你的
sortedVector
不应该也存储一个比较函子吗?你的意思是a==?可能,我对这个完全陌生,但如果需要,我会在以后添加它。我需要它干什么?:)不幸的是,这是我从来没有听说过的事情,考虑到它的性质和限制,我认为在这种情况下不应该使用它老实说,我可能在错误的轨道上思考专业化。任务是:“在这个任务中,你将创建一个模板类排序向量,它应该能够存储任何给定类的实例或内置的C++数据类型。如果向量已满,则应返回“false”。当然,还有一个列表,列出了类至少应具有的内容和给定的“main”。因此,这正是您所需要的。我添加了一个默认实现。尽管我认为您需要自己维护存储,而不是依赖
std::vector
。您也可以跳过默认的
Comp如果你不想依赖任何stdlib功能,你可以自己实现排序。你知道那种感觉吗?当你突然意识到你是多么的白痴时?:D当然!我必须为我的类设置一个比较运算符。facepalm@JKase你知道那种感觉吗?当你既没有被投票支持也没有被接受的时候您的答案需要努力,需要解开其他人的需求,并且100%准确;)