【发布时间】:2020-10-02 23:21:37
【问题描述】:
我正在尝试实施一种策略模式。现在我正在制作一个函数指针向量,它接受一个整数向量作为它们的类型。我把这个函数指针向量称为“算法”。我希望向量中的每个函数指针都指向不同的排序类(合并、冒泡或插入)。我的类结构是这样的:Algorithm是基类,Sort是继承自Algorithm的抽象类,然后Merger、Insertion、Bubble都继承自Sort。我现在遇到的问题是我似乎无法让我的 mergePointer 指向 Merger 类中的sortFunc()。当我尝试执行我的代码时,它说:
main.cpp:59:28:错误:使用未声明的标识符“sortFunc” 合并指针 = sortFunc(); ^
我最初认为问题出在范围分辨率上,所以我在sortFunc() 前面添加了Merger::,我得到了同样的错误。我不熟悉多态性,甚至不确定我想要做的事情是否可行,有什么想法吗?
class Algorithm{
private:
public:
vector<int> data;
static std::vector<void (*)(std::vector<int>&)> algo;
void (*activeAlgo)(std::vector<int>&);
enum SortingAlgorithms{
Merge = 0, Insertion, Bubble, Last
};
void load(){
void (*mergePointer)(vector<int>&);
mergePointer = sortFunc();
algo.push_back(mergePointer);
}
void select(SortingAlgorithms sort){
}
};
//abstracted class
class Sort: public Algorithm{
private:
public:
virtual void sortFunc() = 0; //pure virtual function
};
class Merger: public Sort{
private:
public:
void sortFunc(){
data = mergeSort(data);
print(data);
}
};
class Insertion: public Sort{
private:
public:
void sortFunc(){
printVec(data);
insertionSort(data);
printVec(data);
}
};
class Bubble: public Sort{
private:
public:
void sortFunc(){
printVector(data);
bubbleSort(data);
printVector(data);
}
};
int main(){
Sort *myAlgo;
myAlgo->select(Algorithm::Bubble);
}
【问题讨论】:
-
@CrashMan123 很明显,类算法中使用的名称 sortFunc 尚未声明。
-
Algorithm应该是一个模板化的类或函数,可以用具体的Sort实现来实例化。甚至都不需要抽象基类 看std::sort()例如,算法只需要一个容器(迭代器)接口, -
@VladfromMoscow 我在 Merger、Bubble 和 Insertion 类中声明了 sortFunc。我如何去调用那些在类算法?
-
@CrashMan123 任何使用的名称都应在使用前声明。
-
@CrashMan123 基类对其派生类一无所知。
标签: c++