C++多引數模板偏特化
阿新 • • 發佈:2019-01-26
多引數模板必須對所有引數才能偏特化,本文給出一種解決特化單個引數的方案
例:使用loki中的多執行緒模板
SingleThreaded<Host>單執行緒無需鎖
ObjectLevelLockable<Host>多執行緒鎖單一例項
ClassLevelLockable<Host>多執行緒鎖類
現我希望使用編譯時定義的const
#ifdef _MT
const int MT=1;
#else
const int MT=0;
#endif
來讓我的類在單執行緒和多執行緒下編譯時使用不同的策略
class Some:public Lock<Some>;
單執行緒時使用Single,多執行緒時使用ObjectLevel
template<int mt>struct lockImpl;
template<>lockImpl<1>{
template <Host>class Lock:public ObjectLevelLockable<Host>{}
}
template<>lockImpl<0>{
template <Host>class Lock:public SingleThreaded<Host>{}
}
template <class Host>class MyLock:public loclImpl<MT>::Lock<Host>{}