利用模板简化数据的管理

  • 在和第三方的库进行交互时需要满足其内存布局,出于跨语言的原因,没有使用结构
int  GetPvtLen(double* pIn, int length, double pStep, int pMode, int* resLength);
  • 为了使用方便,自己对其进行按内存布局进行包装
    • 取名,对变量取个友好的名字
    • 数组,归类不要进行标号 v1,v2,v3...等
struct tracePoint
{
    union
    {
        struct {
        double x,y,z;
        double vx,vy,vz;
        double t;
        };

        double datas;
    };
};

这样一来就有了结构

  • 结构的数量不确定,所以需要从堆上进行动态分配
  • 直接管理这些对象是很麻烦的
    • 需要一个对象存储指针
    • 需要管理内存的长度
  • 定义一个对象来管理这一组对象
    • size: 对象数量
    • datas: 内存区
利用模板简化数据的管理_第1张图片
image.png
  • 这样一来:
    • 在构造、析构函数中可以进行内存管理,确保不会内存泄漏
    • 资源分配也限制在管理对象中,不需要调用方管理 new/delete
  • API调用中海油其他类型的OBJ,其内存布局不同的数据交互
    • 将mgr改造为模板
template 
class xxxGroup
{
protected:
    int mSize;
    T *mDatas;

public:
    void clear()
    {
        mSize = 0;
        if ( NULL != mDatas )
        {
            delete []mDatas;
            mDatas = NULL;
        }
    }
    int size()
    { return mSize; }
    T *data()
    { return mDatas; }

    int alloc( int n )
    {
        Q_ASSERT( n > 0 );
        mDatas = new T[ n ];
        if ( NULL == mDatas )
        { return -1; }

        mSize = n;
        return 0;
    }

public:
    xxxGroup()
    {
        mSize = 0;
        mDatas = NULL;
    }

    ~xxxGroup()
    {
        clear();
    }

};

你可能感兴趣的:(利用模板简化数据的管理)