原创 CheckReturn(檢查返回值)

Loki庫提供了一種方法,要求函數返回後,使用者必須對其進行檢查或則賦值。以必須判斷指針爲例進行說明。 自己寫的代碼簡化了很多 CheckReturn.h #pragma once #include <assert.h> template

原创 第六章(隔離)

都在說解耦合,但是如何解,哪些情況下有偶爾呢?看看前人的總結總是好的 此處都是針對編譯時的解偶爾,不涉及鏈接和最後發佈。 1、編譯時耦合 1.1 IsA的關係 繼承:class D: public B 不管繼承方式,B的變化都將影響D的重

原创 OrderedStatic

OrderedStatic實現了對象的生命期控制,根據對象壽命  Longevity控制析構順序。默認情況下,全局變量和static全局變量的析

原创 boost之variant使用

variant有點類似於C++的聯合體union,但是它比union強大,union只能容納原始類型,variant可以容納任意類型 源代碼看了蠻久,沒太看懂,這就是模板的壞處了 簡單看下使用舉例 class CTest {  char

原创 bind及function的簡單舉例

當時想着一個帶參數的函數,如何將參數指定好,然後保存到一個對象中,後續直接調用這個對象即可 而不用再這個對象中再傳入參數。function的使用就需要再傳參數,比如 void GlobalFunction(int& i) {     ++

原创 第四章(同步併發操作)

1、條件變量 線程1完成後,通知其它線程它執行完成了。通過條件變量實現 void CTestThreadCondition::Preparation_Thread() {     while (true)     {         lo

原创 第一部分(基本規則)

1、內部鏈接,外部鏈接 內部鏈接:只在本編譯單元(.obj)能訪問和使用的,反之,其它obj文件能訪問到該變量或則該接口,那麼就是外部鏈接了 比如 a.cpp中 void Test(){} 在b.cpp中看似訪問不到Test,我們只需要在

原创 QVariant源碼解析

QVariant可以支持任意類型的存儲,功能有點類似於boost中的any,但是實現卻完全不同,它同樣是類型安全的,而且代價更小 要熟悉QVariant,我們需要先看下qRegisterMetaType的源碼 先簡單看下如何使用QVari

原创 DefaultAlloc

loki庫中DefaultAlloc中介紹了c++目前支持的new 和 delete相關的操作 我們知道new操作實際包含兩個步驟:operator new:分配內存,構造函數調用。 而operator new我們是可以重載的 相對的de

原创 Lambda使用

 1、Lambda的各種調用 void CTestA5::TestLambda() {     [](){cout << "call no param lambda" << endl; }();  // Lambda調用。無參數的情況

原创 Qss學習之一(屬性設置)

本文只介紹如何設置參數,不講解有哪些屬性參數。 qss通過/*selector:declaration*/設置其屬性參數等 我們在本地創建一個qss文件,然後在代碼中加載即可 QFile qss("testqss.qss"); qss.

原创 第1部分(必備知識)

1、錯誤處理 GetLastError,SetLastError,這兩個函數與線程相關的。參數DWORD有分段的含義,比如第29位爲0表示Microsoft定義的錯誤碼,爲1表示客戶端定義的錯誤碼 錯誤翻譯FormatMessage,參數

原创 ScopeGuard

目前看到的  ScopeGuard的有個比較能用的上的地方就是,如果需要退出時執行某個操作,可以和方便的使用,而不需要用try finally。

原创 環形內存circular_buffer

boost中支持環形內存。該內存在一些地方還是蠻實用的。 簡單看下具體使用及部分源碼,使用和源碼相對來說都還是比較簡單,易於理解的 與STL接口基本一致 void CCircularBufferTest::TestCircularBuf

原创 boost之any源碼解析

any是一個特殊的容器,它只能容納一個元素,但元素類型是任意的 使用也比較簡單 內部是通過typeinfo的概念實現的。 void CAnyTest::Test1() {  CTest1 t1;  any any1(t1);  try