每日整理-优雅的编程习惯

  1. do while(0)的使用
    作用:循环内处理逻辑,循环外统一处理错误。当发生错误可以随时跳出,减少重复代码。
enum class test { unKnow = 0, loadError = 1 };
bool isReal(test nNum)
{
    //_Log_Debug("in isReal");
    bool bRet = false;
    std::string message;
    do
    {
        if (nNum == test::unKnow)
        {
            //错误处理
            message = "unKnow";
            break;
        }
        int nA = 0;
        //逻辑处理得出nA = 1
        if (nNum == test::loadError && nA!=0)
        {
            //错误处理
            message = "loadError nA!=0";
            break;
        }
        //逻辑处理
        bRet = true;
        message = "ok";
    } while (0);
    if (!bRet)
    {
        //_Log_Error(message);
    }
    //_Log_Debug("out isReal");
    return bRet;
}
  1. map在多线程下使用
    将map的插入,删除和查找封成三个分别带锁的函数,增加安全性。
std::map<int, std::string> mMap;
std::mutex mu;
bool getMap(const int num, std::string &str)
{
    std::lock_guard<std::mutex> lg(mu);
    bool bRet = false;
    str.clear();
    if (mMap.find(num) != mMap.end())
    {
        str = mMap.find(num)->second;
        bRet = true;
    }
    return bRet;
}
void setMap(std::pair<int, std::string> pa)
{
    std::lock_guard<std::mutex> lg(mu);
    mMap.insert(pa);
}
void delMap(const int num)
{
    std::lock_guard<std::mutex> lg(mu);
    if (mMap.find(num) != mMap.end())
    {
        mMap.erase(mMap.find(num));
    }
}
  1. 多平台开发需要注意彼此区别
    可以借助#ifdef #ifndef #elfi #else #endif来区分,在makefile里可以借助-D制定该宏定义
//#pragma onnce
#ifndef _test_include 
#define _test_include
#include "public.h"
class CTest
{
public:
	CTest();
	~CTest();
	void show();
private:
	class CImpl;
	std::unique_ptr<CImpl> m_pImpl;
};

#endif

g++ -D _test_include hello.cpp -g -o test
表示_test_include已经被定义

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值