Параметры шаблона позволяют компилятору выполнить замену самого параметра шаблона шаблона , когда компилятор находит объявление определенного типа. Вы ничего не наследуете.
Если вы используете Type
где-то в своем классе Field
, подстановка выполняется соответствующим образом, и только указанный метод проверяется компилятором.
template<class Type>
class Field {
void Foo()
{
Type instanceOfType;
instanceOfType.clear();
}
void NeverCalledMethod()
{
Bar(); //bar doesn't exist
}
};
Field<vector> aField; // here the type Field<vector> is instantiated for the first time.
aField.Foo(); // only here the template class Foo() method is included by the compiler.
При определенных обстоятельствах (например, Bar()
тело «s имеет допустимый синтаксис), компиляция не будет зависеть от ошибки в его теле, если Bar()
он никогда не звонил. Потому что Bar()
он никогда не вызывается, и компилятор может его разобрать, но не пытается его скомпилировать, этот код не приведет к ошибке компилятора.
Что такое 'vector'? Вы имеете в виду 'std :: vector'? –
Ничего не унаследовано. Если вы хотите наследовать, вам нужно написать что-то вроде 'template class Field: public Type {};', а затем применяются правила обычного наследования. –
nwp