2013-06-11 15 views
7

Próbuję zrozumieć niektóre kodu C++. Jestem doświadczonym programistą Java próbującym nauczyć się C++. Czytałem już wyczerpujące artykuły na temat szablonów, ale nikt z nich nie odpowiedział mi, co oznacza poniższa specyfikacja szablonu.C++: Co oznacza szablon <class>?

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

Część I nie rozumiem template<class> gdzie myślę, że niektóre specyfikacje typ brakuje. Ale kod kompiluje się bez problemów.

+4

wyszukaj "parametry szablonu szablonu". – juanchopanza

Odpowiedz

6

Korzystanie NodeBuilderTT jako przykład, ponieważ łatwiej:

NodeBuilderTT jest parametrem szablonu, który jest sam w sobie szablon mający jeden parametr - nazwijmy to Z.

Mogłeś wybrany formalnie nazwać Z a kod będzie kompilować tak samo:

template<class Z> class NodeBuilderTT 

tej pory ten jest bardzo podobny do deklarujących argumentów Funkcja:

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

Jednak z funkcje zazwyczaj używają nazwy x w treści funkcji. Z szablonami ty nie może użycie Z w definicji VORosInterface, więc nie ma absolutnie żadnego sensu nazywanie go i jest idiomatyczne napisać

template<class> class NodeBuilderTT 

podziękować K-Ballo za pomoc ustanowił rekord prosto tutaj.

+2

Nawet jeśli zadbałeś o to, by nadać mu nazwę, nie ma to znaczenia, ponieważ nie możesz go użyć. –

+0

Dzięki za wyjaśnienie! Teraz jest dla mnie jasne, ale im głębiej wkraczam do C++, tym bardziej kocham Javę :-D –

+0

@ K-ballo: Mówisz, jeśli napisałem "szablon