0

在 PETSc 中,许多常用结构(例如 Vec、Mat、IS 等)的定义类似,如下面的 4 个片段所示。问题:

  • PETSCHEADER 何时以及如何扩展?我正在用另一种语言编写外来界面,并且想知道是否必须将宏包装在函数中或诸如此类
  • hdr和的范围是ops什么?

提前致谢


petscvec.h

typedef struct _p_Vec* Vec;

vecimpl.h

struct _p_Vec {
  PETSCHEADER(struct _VecOps);
  PetscLayout            map;
  void                   *data;     /* implementation-specific data */
  ...

petscimpl.h

#define PETSCHEADER(ObjectOps) \
  _p_PetscObject hdr;          \
  ObjectOps      *ops

vecimpl.h

typedef struct _VecOps *VecOps;
struct _VecOps {
  PetscErrorCode (*duplicate)(Vec,Vec*);         /* get single vector */
  PetscErrorCode (*duplicatevecs)(Vec,PetscInt,Vec**);     /* get array of vectors */    
...
4

0 回答 0