具有多种模板类型的 C++ 模板函数显式特化

C++ template function explicit specialization with multiple template types

我想用两种模板类型编写一个模板化函数:一种是 bool,一种是类型名,我想专注于类型名。

例如,这就是我想要的,但专门针对 T 的几种类型:

template<bool b, typename T>
void foo(T val)
{
   // do different stuff based on b and type of T.
}

没有布尔值,我可以这样做:

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 只涵盖单一类型的情况。

template<bool B, typename T>
void foo(T const&)
{
    static_assert(false, "not implemented");
}

template<bool B>
void foo(short)
{
    printf("it's a short!\n");
}

然而,这并不是真正的特化,而是重载,这是完全合适的。事实上,你可以忽略一般情况。