VIM 用正则表达式实现批量函数声明到dummy定义

事情起因于打算写一个默认的接口实现,里边什么也不做而是直接返回以尽快让程序编译通过,这个接口的实现是dummy的,什么也不干。

 

因为原来的接口是OO风格的纯虚函数,需要做的工作就是所有的函数继承过来做一个空实现。

头文件是好办了,直接cp过来,然后加一个类继承声明,并把名字替换掉,

  virtual function()=0;

后边的“=0”替换就可以了,用正则替换很容易做到了。

 

对CPP而言,第一步的办法首先是把所有的声明拷贝过来然后再做变换了:

cat DefaultMediaInterface.h  | sed -e 's//s/+/(virtual.*/)//1/'| awk -F 'virtual' '{if (NF>=2) {print $0} }'
virtual ~DefaultMediaInterface(){}                          
virtual int setVolume(int volume);
virtual int setMicrophoneGain(int gain);
virtual int muteMicrophone(bool mute = true);
virtual int setAudioAECMode(bool enable = true);
virtual int enableAGC(bool enable = true);
virtual int enableAudioNoiseReduction(bool enable = true);
virtual int playAudio(const char* filePath, bool repeat, bool remoteOnly,
virtual int stopAudio();
virtual int playBuffer(const char* data, size_t len, int rate, int type,
virtual int startTone(const resip::Data& toneid, bool local, bool remote);
virtual int stopTone();
virtual int createPlayer(StreamPlayer** player, const char* url, int flag);
virtual ~DefaultMediaManipInterface(){};
virtual int enumerateCodecsSdp(sdpcontainer::SdpCodec**); 
virtual int applyInputMixWegiths(int port, MpBridgeGain* inputs, int len);
virtual int applyOutputMixWeights(int port, MpBridgeGain* outputs, int len);
virtual int getResourceInputBridgePort(BridgeInputType type, int* port);
virtual int startRtpSend(int connId, sdpcontainer::SdpCodec** codecs, int codecNum);
virtual bool isSendingRtpMedia(int connId);
virtual int stopRtpSend(int connId);
virtual int startRtpReceive(int connId, sdpcontainer::SdpCodec** codecs, int codecNum);
virtual bool isReceivingRtpMedia(int connId);
virtual int stopRtpReceive(int connId);
virtual int createConnection(int connId, flowmanager::Flow* rtpFlow, flowmanager::Flow* rtcpFlow, bool flag/*MYTODO*/);
virtual int createConnectionNoFlow(int connId, const char* addr, unsigned short port);
virtual int getConnectionBridgePort(int connId, int* port);
virtual int checkConnCodecSupported(int connId);
virtual int deleteConnection(int connId);

将这个输出先重定向到cpp, 然后在里边模式替换好了:

%s/virtual/s/+/(/w/+/)/s/+/(/w/+/s/?(.*)/);//1 ClassName::/2/r{/rreturn 0;/r}/r/gc

 

思想是比较简单的,以virtual 开头,接下去返回值,函数原型声明,替换为

 

返回值 类名 :: 原型声明

{

     return 0;

}


这样就简单的实现了批量将声明转换成了实现,里边实现的是一个简单的 { return 0; }语句。

 

大批量的这种替换,省下的工作量还是可观的。

 

PS:一个可能存在的问题是, 如果函数声明成了两行,那么会漏掉一部分,不过无伤大碍,各个击破即可。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值