2016-11-11 52 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

模板参数允许编译器执行通用模板参数本身的替换,当编译器找到具体类型的声明时。你没有继承任何东西。

如果您在Field类的某处使用Type,则相应地执行替换操作,编译器只会查找引用的方法。

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()的身体有一个有效的语法),编译不会被错误在它的身上受到影响,如果Bar()它永远不会被调用。 因为Bar()它从来没有被调用,编译器可以解析它,但不会尝试实际编译它,上面的代码不会产生任何编译器错误。

+2

Re。最后一句,对此有一些限制。对于初学者来说,它不能包含语法错误。 –

相关问题