使用指令专业化的模板

时间:2014-06-10 20:46:31

标签: c++ templates alias partial specialization

虽然允许模板特化,但是不能使用指令专门化模板。 无论如何要实现它的一些技巧是什么?

例如:


这没关系:

template <class A>
class MyTemplate { ... };

template <>
class MyTemplate<int> { ... };

这不是:

template <class A>
using Alias = SomeClass<A>;

template <>
using Alias<int> = MyBigIntClass;

编辑:

目标是在客户端代码中使用Alias<int>,并将其MyBigIntClass置于幕后。

1 个答案:

答案 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
}