使用指令专门化的模板

Template using directive specialization

本文关键字:专门化 指令      更新时间:2023-10-16

虽然模板专门化是允许的,但是不能使用指令专门化模板。有什么技巧可以达到这个目的呢?

e。g:


this is ok:

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
}