多参数模板必须对所有参数才能偏特化,本文给出一种解决特化单个参数的方案
例:使用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>{}