場景:當(dāng)使用外部函數(shù)時,會遇到參數(shù)類型和內(nèi)部使用的類型不同,如內(nèi)部使用int,參數(shù)使用short。特別是作為輸出參數(shù)的指針類型。如:
void ExternalFunc(short* value);
void InternalFunc(int* value) {
...
short valueIn = *value;
ExternalFunc(&valueIn);
*value = valueIn;
...
}
需要增加轉(zhuǎn)換代碼,顯得比較羅嗦。
方法:編寫一個轉(zhuǎn)換用的類,可使代碼簡單。
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));
}
這個方式的優(yōu)點是語義連貫,沒有干擾閱讀的代碼。
進一步:該方式寫成模板適用性會更廣。
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;
};