2010-12-15 3 views
0

ist Folgendes möglich:Template-Klasse mit Container mit Zeigern auf sich

template<class Container> 
class TreeNode 
{ 

Container mChildren; 
} 

TreeNode<std::vector<boost::shared_ptr<TreeNode>> myTreeNode; 
+1

Was macht Ihr Compiler Ihnen sagen? – KevenK

+0

Der folgende Fehler wird ausgegeben: Fehler C3203: 'TreeNode': unspezialisierte Klassenvorlage kann nicht als Vorlageargument für Vorlagenparameter 'T' verwendet werden, erwartet einen echten Typ – user152508

Antwort

2

Nicht wie Sie getan haben. TreeNode ist keine Klasse, sondern eine Klassenvorlage. Ich bin in Eile jetzt so nicht die einfachste oder elegante Weise sein könnte, aber es ist möglich:

#include <vector> 

using namespace std; 

class Container {}; 

template<class Container> 
class TreeNode 
{ 
    Container mChildren; 
}; 

class TreeNodeWrapper; 

typedef TreeNode<std::vector<TreeNodeWrapper*> > recursiveTreeNode; 

class TreeNodeWrapper : public recursiveTreeNode { 
}; 

recursiveTreeNode myTreeNode;