【发布时间】:2021-12-28 22:40:08
【问题描述】:
我想编写一个具有两种模板类型的模板化函数:一种是布尔型,一种是类型名,我想专门研究类型名。
例如,这就是我想要的,但只专注于 T 的几种类型:
template<bool b, typename T>
void foo(T val)
{
// do different stuff based on b and type of T.
}
如果没有 bool,我可以这样做:
template<typename T>
void bar(T val) {
static_assert(false, "not implemented");
}
template<>
void bar<short>(short val) {
printf("it's a short!\n");
}
我无法弄清楚这个的语法,microsoft docs on specialization 仅涵盖单一类型的情况。
【问题讨论】:
-
据我所知,只有类才支持部分专业化。对于功能,您必须完全专业化。一种解决方法是在这种情况下拥有一个调用类的函数。该函数可以调用模板类中的静态函数,该函数可能具有与该函数相同的模板参数。然后,您可以部分或完全专业化该课程。
标签: c++ templates template-specialization specialization