method-template中语法的含义

时间:2014-01-19 17:39:31

标签: c++ templates syntax function-templates

我对以下代码有两个问题:

  211 template<class Type>
  212 tmp<GeometricField<Type, fvsPatchField, surfaceMesh> >
  213 limitedSurfaceInterpolationScheme<Type>::flux //Return the interpolation  
                                                    //weighting factors.
  214 (                                             
  215     const GeometricField<Type, fvPatchField, volMesh>& phi
  216 ) const
  217 {
  218     return faceFlux_*this->interpolate(phi); //const surfaceScalarField& 
  219 }                                            //faceFlux_
  1. 第211-213行:显示的方法flux(...)应该是一个方法模板,其中返回类型为limitedSurfaceInterpolationScheme<Type>。这个连接中的tmp<GeometricField<Type, fvsPatchField, surfaceMesh> >究竟意味着什么?

  2. 第218行:faceFlux_*this做了什么? faceFlux_是类模板limitedSurfaceInterpolationScheme<Type>的成员对象,*this是调用对象方法flux(...)的内容。

  3. 问候 streight

2 个答案:

答案 0 :(得分:4)

  1. tmp<GeometricField<Type, fvsPatchField, surfaceMesh> >是来自班级flux的方法limitedSurfaceInterpolationScheme<Type>的返回类型。这是来自类模板的常规方法,而不是方法模板

  2. faceFlux_*this->interpolate(phi);faceFlux_*(this->interpolate(phi));完全相同 - 它是乘法。

答案 1 :(得分:1)

确实清晰的写作会说清楚

  template<class Type>
  tmp<GeometricField<Type, fvsPatchField, surfaceMesh> >
  limitedSurfaceInterpolationScheme<Type>::flux(const GeometricField<Type,fvPatchField,volMesh> &phi ) const
   {
     return faceFlux_  *  this->interpolate(phi);  
   }     

所以从上面可以清楚地看到它是在头文件中定义的函数的实现。

template<class Type>
class limitedSurfaceInterpolationScheme
{
  //before  c++ 11 we had to write nested template right angle bracket with space > >
//return_type fun_name(argument) 
tmp<GeometricField<Type, fvsPatchField, surfaceMesh> >  flux(const GeometricField<Type,fvPatchField,volMesh> &phi ) const ;// constant member function

}

有关详情,请参阅How to define a template class in a .h file and implement it in a .cpp file