2016-11-11 8 views
-1

Если у нас есть шаблон класса, какКакие члены наследуются от параметра шаблона

template<class Type> 
class Field { 
.... 
}; 

Теперь, если я объявил объект класса Field в

Field <vector> velocityField; 

Так какой член функции наследуется форма vector к моим velocityField

+2

Что такое 'vector'? Вы имеете в виду 'std :: vector'? –

+0

Ничего не унаследовано. Если вы хотите наследовать, вам нужно написать что-то вроде 'template class Field: public Type {};', а затем применяются правила обычного наследования. – nwp

ответ

2

Параметры шаблона позволяют компилятору выполнить замену самого параметра шаблона шаблона , когда компилятор находит объявление определенного типа. Вы ничего не наследуете.

Если вы используете 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() он никогда не вызывается, и компилятор может его разобрать, но не пытается его скомпилировать, этот код не приведет к ошибке компилятора.

+2

Re. последнее предложение, есть некоторые ограничения на это. Для начала он не может содержать синтаксические ошибки. –

 Смежные вопросы

  • Нет связанных вопросов^_^