2010-11-05 10 views
6
class Example { 

    // ... 
}; 

template <typename T, Example ex> //Error 
class MyExample{ 

    // ... 
}; 

Moje pytanie brzmi, dlaczego nie można szablonować parametrów innych niż typu klasy?Dlaczego nie można wzorcować parametrów nietypowych typu klasy

Błąd, że mogę to

error: ‘class Example’ is not a valid type for a template constant parameter

+2

Proszę wyjaśnić - jakiego rodzaju błąd kompilacji widzisz? – seand

+0

Spróbuj (przykład * ex). To zadziała:] – k06a

+0

Może (Przykład i ex) działa. Spróbuj . . . – k06a

Odpowiedz

13

prostu, bo takie są zasady. Racjonalnie, parametry szablonu muszą zostać rozwiązane w czasie kompilacji, a obiekty typu klasy są konstruowane (nawet tymczasowe i te z statycznym czasem przechowywania) w czasie wykonywania. Możesz mieć tylko parametry szablonu, które są "wartościami" rozwiązywalne w czasie kompilacji, takie jak liczby całkowite i typy. Możliwe jest jednak, że parametry szablonu to wskaźniki lub odwołania do obiektów.

3

Według c++ standard,

A non-type template-parameter shall have one of the following (optionally cv-qualified) types: 
— integral or enumeration type, 
— pointer to object or pointer to function, 
— reference to object or reference to function, 
— pointer to member. 

A non-type template-parameter shall not be declared to have floating point, **class**, or void type. 

Jest oczywiste, że każda std zgodne kompilator zgłasza błąd jeśli zadeklarować klasę jako non typu szablonu argumentu.

Powiązane problemy