虽然允许模板特化,但是不能使用指令专门化模板。无论如何要实现它的一些技巧是什么?
e.g:
还行吧 :
template <class A>
class MyTemplate { ... };
template <>
class MyTemplate<int> { ... };
这不是:
template <class A>
using Alias = SomeClass<A>;
template <>
using Alias<int> = MyBigIntClass;
编辑:
目标是在客户端代码中使用Alias<int>
,并将其作为引擎盖下的MyBigIntClass
。
这是技巧(使用模板专业化):
template <class A>
struct Helper{ //default case
using t = SomeClass<A>; //use void or omit this line to disable default case
};
template <class A>
using Alias = typename Helper<A>::t;
template <>
struct Helper<int>{
using t = MyBigIntClass; //whatever you need
};
int main()
{
Alias<int> a = 0; //It's MyBigIntClass under the hood
}