2016-04-22 93 views
0

嘿,我试图创建一个链表的模板链表,我已经跑进了死胡同。 我认为我关于模板的知识让我一片空白!试图创建一个包含不同类型的数据

所以我试图创建一个包含对象,其中包含了引用一些数据参考以前的对象列表中的一个链表。

所以是这样的:

template<class T> 
class ClassHeader 
{ 
    //-- Variables 
    T* object; 
    ClassHeader<T>* previousHeader; 
}; 

我想象的还要像这样:

 Data______  Data_____ 
    |   |  |   | 
    |__________|  |_________| 
    ^   ^
    |    | 
    | Header  | Header 
    |Data*  |  |Data* | 
<---|Header* |<----|Header* | 
    |   |  |   | 
    |__________|  |_________| 

,我会保持一个参考列表其他地方的“顶” classheader 。然后,我打算继续下去,并随时访问每个“对象”。

我无法弄清楚如何做到这一点,到目前为止,我将(据我可以告诉)需要知道前手这是我想要的信息,每个前面“对象”的类型要得到!

同样,每个“对象”参考(图中的数据)可以是完全不同的类型。

任何帮助?

+0

为什么它需要包含一个指向对象?为什么不把这个类的实例放置在链表类本身中呢?通常,链接列表由包含列表的数据类型的节点和列表中下一个元素的指针组成。 – Stephen

+0

也许沟模板,并使用[继承](http://stackoverflow.com/q/6118721/395718)。或者,如果继承是不可能的,请使用您自己的VARIANT,它可以包含您关心的所有类型。 – Dialecticus

+0

@Stephen即使它包含实例会不会仍然有同样的问题?因为我仍然需要知道前一个标题的类型以启动* previousHeader,对吧? –

回答

0

也许从“Inheritance is the base class of evil”讲这种模式将有助于...

相应的源代码可以在这里找到 - https://github.com/boostcon/cppnow_presentations_2012/blob/master/fri/value_semantics/value_semantics.cpp

就拿类从上面的代码object_t和model_t,使object_t - 数据你的名单的类型。根据需要定义助手和访问方法。

+0

唯一的问题是,我的列表中的数据必须能够**任何**,这是我遇到问题的地方。所以我需要能够创建一个类(任何类),并将指针传递给classHeader,该类将包含其生命期的指针。 –

+0

Luke, 这正是object_t所做的。它有一个模板化的构造函数,可以将任何类型作为参数。在内部,这导致创建另一个model_t的模板化后裔。 – Ghostrider

+0

好吧,我认为也许我读过它有点太快,但也许,这可能是我正在寻找:)我会有一个适当的看看它,看看有什么办法我可以使用这个。谢谢! –

相关问题