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

本文介绍了一种通过编写转换类来简化在使用外部函数时因参数类型不一致而引起的复杂性,特别关注了作为输出参数的指针类型。通过这种方式,可以保持代码的语义清晰性和阅读友好性,同时提高代码的可维护性。
场景:当使用外部函数时,会遇到参数类型和内部使用的类型不同,如内部使用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));
    
}
这个方式的优点是语义连贯,没有干扰阅读的代码。

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



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值