使用通用ADT

时间:2012-05-28 15:16:27

标签: c++ generics adt

我遇到了设计问题。我被要求为某个问题设计一个设计,我需要一些列表,还有一个队列(我需要自己创建,不允许使用STL)。为了提高实现效率,我考虑创建一个通用列表,如下所示:创建一个包含指向'Data'的指针的节点,一个空类。然后,我想要制作列表或队列的任何类(最后一句语法是否正确?),我只是将它作为数据的子类。这是制作通用列表的唯一方法(我认为),因为我们不允许使用void *。 当我想在某个列表中使用某个类的某个方法时,问题就开始了。我不能这样做,因为'数据'不知道这个功能。在Data中创建虚拟函数是反逻辑和丑陋的,我们也不允许使用任何向下转换。 有没有办法克服使用通用ADT的问题?或者我必须创建特定列表吗? 非常感谢你! 编辑:我们也不允许使用模板。

1 个答案:

答案 0 :(得分:0)

关于列表和队列,也许您可​​以采用STL采用的相同方法:只需创建列表,然后堆叠,作为列表的适配器,您只需从其中推送和弹出。

关于那些看似严苛的约束,难道我不认为你的目标是使用模板吗?

而不是创建和清空类,如果不包含任何方法,则根本不为您提供服务,请使用模板,如下例所示:

template<typename T>
class List {

    class Node {
    public:
        Node(T* d)
            { data.reset( new Data( d ) ); }
        T * getData()
            { return data; }
        Node * getSig()
            { return sig; }
    private:
        std::auto_ptr<T> data;
        Node * sig;
    };

    List()...
// Lots of more things...
};

您可以在此处找到更多信息:

http://www.cplusplus.com/doc/tutorial/templates/

希望这有帮助。