如果我们有像哪些成员从模板参数
template<class Type>
class Field {
....
};
类模板现在,如果我宣布Field
类的一个对象作为
Field <vector> velocityField;
所以其成员函数被继承的形式继承vector
我的velocityField
如果我们有像哪些成员从模板参数
template<class Type>
class Field {
....
};
类模板现在,如果我宣布Field
类的一个对象作为
Field <vector> velocityField;
所以其成员函数被继承的形式继承vector
我的velocityField
模板参数允许编译器执行通用模板参数本身的替换,当编译器找到具体类型的声明时。你没有继承任何东西。
如果您在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()
它从来没有被调用,编译器可以解析它,但不会尝试实际编译它,上面的代码不会产生任何编译器错误。
Re。最后一句,对此有一些限制。对于初学者来说,它不能包含语法错误。 –
什么是'vector'?你的意思是'std :: vector'? –
什么都没有被继承。如果你想继承,你必须写下类似'template class Field:public Type {};'然后应用常规继承规则。 –
nwp