我有一个“mediaInfo”的基类,有三个派生类“Book”“Video”和“Music”。在我的主文件中,我有一个声明为“mediaInfo”类型的向量,它动态分配内存并将vector元素分配给“mediaInfo”“Book”“Video”或“Music”,这取决于测试脚本的输入。该代码的另一个功能是按类型(书籍,视频,音乐,媒体信息),名称和媒体值对矢量元素进行排序。我有名字,我正在努力解决如何按类型排序。如果需要,我可以提供代码。谢谢。
答案 0 :(得分:5)
向MediaInfo添加虚拟方法以提供排名信息。例如:
class MediaInfo {
public:
virtual int rank() = 0;
};
class Book : MediaInfo {
public:
virtual int rank() { return 100; }
};
class Video : MediaInfo {
public:
virtual int rank() { return 200; }
};
然后您可以按obj->rank()
和其他信息排序;
答案 1 :(得分:1)
由于C ++ 98有一个名为operator
的{{1}},你可以使用它。
示例:
typeid
输出:
#include <iostream>
#include <typeinfo>
using namespace std;
int main() {
int i;
cout << typeid(i).name();
return 0;
}
您可以采用任何不仅内置的数据类型。
答案 2 :(得分:1)
虽然我看到它气馁,但另一种(技术上)有效的排序方法是使用typeid。快速举例:
std::vector<MediaInfo*> list;
list.push_back(new Book());
list.push_back(new Video());
list.push_back(new Book());
list.push_back(new MediaInfo());
std::sort(list.begin(), list.end(), [](MediaInfo* a, MediaInfo* b){
return typeid(*a).hash_code() < typeid(*b).hash_code();
});
话虽如此,另一个答案中提到的虚拟方法可能是实现它的更好方法 有关typeid陷阱的更多信息可以在here.
找到