2013-06-11 22 views
7

Ich versuche, etwas C++ Code zu verstehen. Ich bin ein erfahrener Java-Programmierer, der versucht C++ zu lernen. Ich habe bereits einige erschöpfende Artikel zu Vorlagen gelesen, aber keiner von ihnen hat mir geantwortet, was die folgende Vorlagenspezifikation bedeutet.C++: Was bedeutet Vorlage <class>?

template< 
    template<template<class> class, class> class VisualOdometryTT, 
    template<class> class NodeBuilderTT, 
    class PoseGraphT> 
class VORosInterface{ ... }; 

Der Teil Ich verstehe nicht, ist template<class>, wo ich eine Art Spezifikation denken fehlt. Aber der Code kompiliert ohne Probleme.

+4

Suche nach "Vorlage Vorlage Parameter". – juanchopanza

Antwort

6

Mit NodeBuilderTT als Beispiel, weil es einfacher ist:

NodeBuilderTT ist ein Template-Parameter, die eine Vorlage selbst ist ein Parameter, die - nennen wir, dass Z.

Sie gewählt haben könnte formal Z und der Code kompilieren genau das gleiche wäre zu nennen: mit der

void foo(int x) {} // works 
void foo(int) {} // also works 

jedoch:

template<class Z> class NodeBuilderTT 

Bisher dies zu erklären, Funktionsargumente sehr ähnlich ist Funktionen würden Sie normalerweise den Namen x im Funktionskörper verwenden. Mit Vorlagen Sie können nicht Verwendung Z in der Definition von VORosInterface, so gibt es absolut keinen Sinn, es zu benennen und es ist idiomatisch zu schreiben

template<class> class NodeBuilderTT 

Mein Dank geht an K-ballo für die Hilfe, die Sache richtig eingestellt.

+2

Selbst wenn Sie sich genug darum gekümmert haben, es zu benennen, ist es bedeutungslos, da Sie es nicht benutzen können. –

+0

Danke für die Erklärung! Jetzt ist es mir klar, aber je tiefer ich in C++ eingrabe, desto mehr liebe ich Java :-D –

+0

@ K-ballo: Sie sagen, wenn ich 'template