模板参数继承了哪些成员
Which members are inherited from the template parameter
如果我们有一个像
这样的 class 模板
template<class Type>
class Field {
....
};
现在,如果我将 class Field
的对象声明为
Field <vector> velocityField;
那么哪些成员函数是从vector
继承到我的velocityField
当编译器找到具体类型的声明时,模板参数允许编译器执行泛型模板参数本身的替换。你没有继承任何东西。
如果您在 Field
class 中的某处使用 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()
它从未被调用,编译器可以解析它但不会尝试实际编译它,所以上面的代码不会产生任何编译器错误。
如果我们有一个像
这样的 class 模板template<class Type>
class Field {
....
};
现在,如果我将 class Field
的对象声明为
Field <vector> velocityField;
那么哪些成员函数是从vector
继承到我的velocityField
当编译器找到具体类型的声明时,模板参数允许编译器执行泛型模板参数本身的替换。你没有继承任何东西。
如果您在 Field
class 中的某处使用 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()
它从未被调用,编译器可以解析它但不会尝试实际编译它,所以上面的代码不会产生任何编译器错误。