我想创建一个优先级队列类,我可以在不同的程序中一次又一次地重复使用,它只存储一个类型/类。
我可以通过使用compareTo方法阻止任何其他类型/类进入队列,但这意味着队列类应该在进入队列的所有类型/类中都需要compareTo方法。
我知道在Java中,您可以使类实现Comparable以确保该类实现compareTo方法。所以我想知道c ++中是否有类似的内容。
同样,我不能使用模板,因此,任何替代方案都将受到赞赏。模板不受限制的原因我也不知道,要求这个程序的人不会对此有所了解。它也必须纯粹是我自己的优先级队列代码。
答案 0 :(得分:6)
答案 1 :(得分:3)
您可以在基类中创建pure virtual function
并继承它。在这种情况下,派生类必须实现该函数,否则它本身就变成了一个抽象类
答案 2 :(得分:1)
因为,你不愿意使用模板。
您也可以在c ++中考虑typeid
。
例如以及更多信息here。
还要考虑related stackoverflow question。
可能适合您的工作示例如下:您可以看到输出here
#include <typeinfo>
#include <iostream>
#include <string>
using namespace std;
class QueueAbleObject{
};
class A : public QueueAbleObject{
};
class B: public QueueAbleObject{
};
class Queueu{
string mQueueDataType ;
public:
void SetType(const std::type_info& typeInfo){
mQueueDataType = typeInfo.name();
cout << "list type " << mQueueDataType << endl ;
}
bool Insert( QueueAbleObject* obj , const std::type_info& objTypeInfo )
{
if( objTypeInfo.name() != mQueueDataType ){
cout << " Incompatible Object type " <<objTypeInfo.name() << endl;
return false;
}
//do insertionn
return true;
}
};
int main(){
Queueu q;
q.SetType( typeid(A) );
A a;
bool res = q.Insert(&a , typeid(a));
cout << " Insertion of A : " << res << endl;
B b;
res = q.Insert(&b , typeid(b));
cout << " Insertion of B : " << res << endl ;
return 0;
}
答案 3 :(得分:0)
c ++ Virtual Function类似于java中的implements