随笔 - 51, 文章 - 1, 评论 - 41, 引用 - 0
数据加载中……

工艺——使用类进行指针转换

场景:当使用外部函数时,会遇到参数类型和内部使用的类型不同,如内部使用int,参数使用short。特别是作为输出参数的指针类型。如:

void ExternalFunc(short* value);

void InternalFunc(int* value) {
    ...
    short valueIn = *value;
    ExternalFunc(&valueIn);
    *value = valueIn;
    ...
}

需要增加转换代码,显得比较罗嗦。

方法:编写一个转换用的类,可使代码简单。

class IntPtrToShortPtr {
public:
    IntPtrToShortPtr(int* intValue) : m_IntValue(intValue) { m_ShortValue = *m_IntValue; }
    ~IntPtrToShortPtr() { *m_IntValue = m_ShortValue; }
    operator short*() { return &m_ShortValue; }
protected:
    int* m_IntValue;
    short m_ShortValue;
};

void InteralFunc(int* value) {
   
    ExternalFunc(IntPtrToShortPtr(value));
   
}

这个方式的优点是语义连贯,没有干扰阅读的代码。

进一步:该方式写成模板适用性会更广。

template<typename T1, typename T2>
class ConvertPointer {
public:
    ConvertPointer(T1* t1Value) : m_T1Value(t1Value) { m_T2Value = *m_T1Value; }
    ~ConvertPointer() { *m_T1Value = m_T2Value; }
    operator T2*() { return &m_T2Value; }
protected:
    T1* m_T1Value;
    T2 m_T2Value;
};

posted on 2014-12-06 22:41 lemene 阅读(141) 评论(0)  编辑 收藏 引用


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理