1

我想创建一个优先级队列类,我可以在不同的程序中一次又一次地重用它,它只存储一个类型/类。

我可以使用 compareTo 方法阻止任何其他类型/类进入队列,但这意味着队列类应该在进入队列的所有类型/类中都需要 compareTo 方法。

我知道在 Java 中,您可以让一个类实现 Comparable 以确保该类实现 compareTo 方法。所以我想知道 C++ 中是否有类似的东西。

同样,我不能使用模板,因此,任何替代品都将不胜感激。我也不知道模板被禁止使用的原因,要求这个程序的人不会对此有所了解。它也必须纯粹是我自己的优先级队列代码。

4

4 回答 4

7

听起来您想用 C++ 构建接口。您应该检查纯虚拟基类。可以在这里找到一个例子:

如何在 C++ 中声明接口?

更多可以在这里找到。

http://www.learncpp.com/cpp-tutorial/126-pure-virtual-functions-abstract-base-classes-and-interface-classes/

于 2013-09-02T05:36:05.337 回答
3

pure virtual function您可以在基类中创建一个并继承它。在那种情况下,派生类必须实现该功能,否则它本身就变成了一个抽象类

于 2013-09-02T05:33:33.350 回答
1

因为,您不愿意使用模板。

您也可以考虑 typeid使用 c++。例如和更多信息在这里

还要考虑一个相关的 stackoverflow 问题

一个可能适合您的工作示例如下:您可以在此处查看输出

#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;   
}
于 2013-09-02T06:00:17.950 回答
0

c++虚函数类似于java中的实现

于 2013-09-02T05:55:31.707 回答