虽然允许模板特化,但是不能使用指令专门化模板。 无论如何要实现它的一些技巧是什么?
例如:
这没关系:
template <class A>
class MyTemplate { ... };
template <>
class MyTemplate<int> { ... };
这不是:
template <class A>
using Alias = SomeClass<A>;
template <>
using Alias<int> = MyBigIntClass;
编辑:
目标是在客户端代码中使用Alias<int>
,并将其MyBigIntClass
置于幕后。
答案 0 :(得分:2)
这是技巧(使用模板专业化):
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
}