- 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;
}
- 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));
}
}
- 多平台开发需要注意彼此区别
可以借助#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已经被定义