我尝试使用自己的比较结构生成std :: sort但是我遇到模板类型的问题。
我有一个指向数据数组的std :: index索引,我想按数组的值对此列表进行排序。这适用于使用以下内容的已知数据类型数组:
struct SortByValue {
double * src;
SortByValue( double * srcP ){ src = srcP;}
bool operator() (long i, long j) {return src[i]>src[j]; }
};
void MyClass::DoStuff(double * data){
std::vector<ulong> myPointVec;
// [...] code filling myPointvec
std::sort(myPointVec.begin(),myPointVec.end(),SortByValue(data));
};
但是,现在我的数据有不同的数据类型,我按照以下方式模拟了DoStuff方法:
template <typename T> void MyClass::DoStuff(typename T * data){
std::vector<ulong> myPointVec;
// [...] code filling myPointvec
std::sort(myPointVec.begin(),myPointVec.end(),SortByValue(data));
};
我遇到的问题是,我没有找到正确的语法将这个模板传递到我的SortByValue结构(需要保持指向正确类型的数据的指针。)我尝试(和失败)模板结构也是:
template <typename MT>
struct SortByValue {
MT * src;
SortByValue( MT * srcP ){ src = srcP;}
bool operator() (long i, long j) {return src[i]>src[j]; }
};
template <typename T> void MyClass::DoStuff(typename T * data){
std::vector<ulong> myPointVec;
// [...] code filling myPointvec
std::sort(myPointVec.begin(),myPointVec.end(),SortByValue((T *) data));
};
那么我该怎么做呢?有人可以发布代码示例吗?
答案 0 :(得分:2)
您应该指出SortByValue
的模板类型,并且typename T*
是错误的构造,它无法编译。它应该是
template <typename MT>
struct SortByValue {
MT * src;
SortByValue( MT * srcP ){ src = srcP;}
bool operator() (long i, long j) {return src[i]>src[j]; }
};
template <typename T> void MyClass::DoStuff(T * data){
std::vector<ulong> myPointVec;
// [...] code filling myPointvec
std::sort(myPointVec.begin(),myPointVec.end(),SortByValue<T>(data));
};