gpt4 book ai didi

c++ - 模板问题,静态继承。无法为其成员依赖于类型的类 Sorter 完成代码

转载 作者:行者123 更新时间:2023-11-28 01:17:35 25 4
gpt4 key购买 nike

我正在尝试创建一个从不同类型的排序静态继承的排序方法类。意思是根据排序选择的类型,sortmethods继承它的成员。我真的不擅长使用模板。

我已经尝试使用可变参数模板,模板的模板,但我仍然无法修复它。

template<typename SortMethod>
class Sorter : private SortMethod{
public:
template<typename container, typename ... Types>
void operator()(container cnt, Types ... args){
this-> sort(cnt, args...);
}
};

int main(){
vector <int> v{10,1,20};
Sorter<QuickSort> S1;
S1(v,v.begin(),v.end());

return 0;
}


class QuickSort{
public:
template<typename C, typename forward>
void sort(C cnt, forward primero, forward ultimo) {
forward i, j, central;
auto mid = (primero + ultimo)/2;
auto pivot = *mid;
i = primero;
j = ultimo;
do{
while(*i < pivot) i++;
while(*j > pivot) j--;

if(i <= j){
swap(*i,*j);
i++;
j--;
}
}while(i <=j);

if(primero < j){
sort(cnt, primero, j);
}
if( i < ultimo){
sort(cnt, i, ultimo);
}
}

template<typename T>
void swap(T x, T y) {
T aux;
aux = x;
x = y;
y = aux;
}
};

我遇到的错误:

/home/eduardo/Desktop/Utec/Poo2/Proyecto2/unidad-2-ordenamiento-Marcuss17/Sort.h:11:9:   required from ‘void Sorter<SortMethod>::operator()(container, Types ...) [with container = std::vector<int>; Types = {__gnu_cxx::__normal_iterator<int*, std::vector<int, std::allocator<int> > >, __gnu_cxx::__normal_iterator<int*, std::vector<int, std::allocator<int> > >}; SortMethod = QuickSort]’
/home/eduardo/Desktop/Utec/Poo2/Proyecto2/unidad-2-ordenamiento-Marcuss17/main.cpp:14:27: required from here
/home/eduardo/Desktop/Utec/Poo2/Proyecto2/unidad-2-ordenamiento-Marcuss17/Quick.h:12:29: error: no match for ‘operator+’ (operand types are ‘__gnu_cxx::__normal_iterator<int*, std::vector<int> >’ and ‘__gnu_cxx::__normal_iterator<int*, std::vector<int> >’)
auto mid = (primero + ultimo)/2;
~~~~~~~~~^~~~~~~~~

最佳答案

从编译器错误信息来看,似乎是primeroultimo类型为 std::vector<int>::iterator .因此,primero + ultimo不是有效操作。

我认为你需要使用

auto mid = primero + (std::distance(primero, ultimo) / 2);

代替

auto mid = (primero + ultimo)/2;

关于c++ - 模板问题,静态继承。无法为其成员依赖于类型的类 Sorter 完成代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58125320/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com