原创 在mdl中的Qt消息重定位

這種重定位簡直太完善了,簡直是爲mdl開發量身定製的。   void mdlMessageOutput (QtMsgType type, const char *msg) { switch (type) {

原创 Qt與Boost多線程比較

雖然mdl開發不支持多線程,如果不涉及mdl的API還是可以使用多線程的,比如QT的UI部分和SQL部分都可以啓用多線程。Qt的和Boost的thread都可以使用。 比較糾結的是二者之間的便捷性不同。習慣了隨意使用function啓動一

原创 訪問者模式之C++實現

看了Java實現的訪問者模式,將其用C++重新實現,比較,可知爲什麼設計模式在Java中更加簡單,這也就是爲什麼幾乎所有關於設計模式的書都是Java實現。因爲資源自動化管理可以更加突出重點。還有,C++的細節太多了,稍不小心就出問題,比如

原创 Bridge模式 - 《Design patterns Explained》心得

最常用的模式之一。 GOF:將抽象部分與它的實現部分分離,使它們都可以獨立地變化。 #include "createElement.h" extern"C" DLLEXPORT int MdlMain ( int argc,

原创 模板方法模式 C++實現

最好的學習設計模式的方法就是用最簡單的例子,模板方法沒什麼難度,主要就是利用了類的繼承與對象多態的特性,最直接的解釋就是”好萊塢法則“,如果明白了模板方法模式,再看MstnTool,就明白部分主要的機理了,它實現的就是一個模板方法,當然還

原创 兩個庫的any容器比較

any容器,僅能包含一個類型的值。將類型歸一,很多庫都有這個容器的實現,比如boost 和 poco庫 #include <QCoreApplication> #include <poco/any.h> #include <vecto

原创 不夠徹底的橋接方式 - 讀《設計模式》

劉偉主編的重點大學專業教才《設計模式》中關於橋接模式的一個例子11.3.1中用Java實現的一個橋接模式,實現的不夠精準: 既然採用的橋接模式,除了基類就不需要知道現實部分的類和其定義了。實現部分的接口完全可以Pen這個基類裏面去了。要不

原创 Windows下Lua Call C的方法

以上僅僅演示了lua call c的流程,但遠不止於此,配合lua之父的那本書看最好。 比如 return 後面的數字代表的返回的結果的數目等等。 又比如,每個函數都有自己獨立的棧,不同於全局的棧,在這個棧裏,index爲1的代表第

原创 boost 與 C++11 比較

先不說boost的初始化表是多麼怪異的形式了。c++11用大括號一括起來就OK了。 auto 和 boost_auto 差別太大了,必須得告訴boost_auto宏一個類型,而非編譯器本身的推斷,不從編譯器上搞突破,效率折扣大了,既然

原创 狀態模式 C++實現

這個模式太繞了,核心是各個狀態的自動切換,Mark一下。cpp文件: // state.cpp : 定義控制檯應用程序的入口點。 // #include "stdafx.h" #include <iostream> #include

原创 備忘錄模式 C++實現

memento模式是設計模式中最枯燥的一種,沒有用到繼承、多態、甚至組合,方法也好理解,最不好理解的是三個角色類及其分工與配合,其中兩個非常普通,originator(原發器)是產生memento的類,memento是保存狀態信息和其他信

原创 設計模式的混合使用

設計模式本來就是一些成熟的使用方法,它的方法性和思想超越了具體的語言,在編碼中,不是刻意而爲的,而是先領會了才能使用,特別是一些模式的混合使用。 比如下面的代碼就用到了觀察者模式和訪問者模式。 mdl的新型API中用了很多的設計模式,比如

原创 qt下的重磅插件QWT和libqxt終於搞定了

經過不眠不休的幾個晝夜,QWT可以安裝在qt+vs2005下,而libqxt因爲編譯器版本不符,死活與qtcreator適應不了。qtcreator低版本的plugins功能太弱了,高版本有拋棄了vs2005. 真折磨死人了………………

原创 BOOST模板庫實現的功能與lua在語言層級提供的支持之比較

因爲編譯器不能升級,所以用了不少boost,與語言層級提供支持,模板庫易用性還是大打折扣。比如boost中還算不很複雜的boost::tuple可以讓函數返回多個值,同樣,lua在語言層面也支持這個功能。std::pair也可包裝2個值並

原创 BOOST中的union:boost::variant

可完美替換掉C的union,而且不僅是POD類型。 取回也更加方便 #include "stdafx.h" #include <string> #include <assert.h> #include <vector> #include