多参数模板必须对所有参数才能偏特化,本文给出一种解决特化单个参数的方案
例:使用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>{}
本文针对多参数模板需对所有参数才能偏特化的问题,给出特化单个参数的方案。以loki中的多线程模板为例,通过编译时定义的const,让类在单线程和多线程下使用不同策略,如单线程用Single,多线程用ObjectLevel。
5880

被折叠的 条评论
为什么被折叠?



