2018年1月2日 星期二

Sprintf 簡單風格字串格式化

用於處理字串格式化的小工具,可指定參數在字串中的插入位置。

範例:

stringstream ss;
Sprintf(ss, "我搭{1}去{0}。", "台北", "火車");

{0} = 第一個參數
{1} = 第二個參數
...

若有錯誤回傳 false,表示指定的參數超過提供的數量範圍

下載:
SPRINTF_1_1_3.zip

2018年1月1日 星期一

TlcMultiple 小工具程式原碼

用於處理 CxxlMan2 函數庫 TLC 文件的同名項目的小工具。
最好的處理方式是 匯入->排序->匯出,以人工方式處理標示同名的項目。
除非確定自動刪除同名項目不會有問題,否則請小心使用 MultipleClear() 功能

下載:
TlcMultiple_1_0_0.zip

使用範例:
先安裝好 CxxlMan2 函數庫,以下是使用範例

2017年12月26日 星期二

靜態多型

相對於靜態多型就是一般較多使用的的動態多型,如:
class Base
{
public:
  virtual void f() = 0;
};
class Derived :public Base
{
  virtual void f() override
  {
  }
public:
};
若改為靜態多型可能會像以下這樣:
template<typename DERIVED>
class Base
{
public:
  void f()
  {
    static_cast<DERIVED*>(this)->f_Imp();
  }
};
class Derived :public Base<Derived>
{
  void f_Imp()
  {
  }
public:
  friend class Base<Derived>;
};

2017年12月25日 星期一

[分享]template 參數的 class 和 typename 還是有差別

若是要做 class 用,就明確指名 class 吧

// template<typename H> 這在 vs2015 過不了
template<class H>
class A
{
  void f()
  {
    cout << "OK" << endl;
  }
public:
  friend H;
};
class B
{
public:
  void f()
  {
    On_a.f();
  }
  A<B> On_a;
};

2017年12月23日 星期六

[轉貼]強制實作

此文截取自 http://www.programmer-club.com.tw/ShowSameTitleN/c/46861.html

用一個範例做個總結,也感謝 coco 提供的 assert,在 C++ 沒有提供 must 之下,還能做到類似的效果,
讓程式簡潔不少,也由此看出 must 的須要性

範例主要展示 prototype pattern 及 visitor pattern 的架構,不過 visitor pattern 做了改良,可以
採用 ClassID 做配對,可以在執行時期做較機動的處理,但為了減少篇幅和難度,還是寫死未做較機動的
處理

Class C 是為了表現未強制實作的後果,有幾處做了 remark,把 remark 的地方恢復,就可正常執行