【问题标题】:C++ template function explicit specialization with multiple template types具有多种模板类型的 C++ 模板函数显式特化
【发布时间】: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


【解决方案1】:
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");
}

但是,这并不是真正的专业化,而是重载,这是完全合适的。事实上,您可以省略一般情况。

【讨论】:

  • 谢谢!我还意识到,在我的特殊情况下,我根本不需要在 T 上进行模板化,但可能会超载。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-11
  • 1970-01-01
  • 1970-01-01
  • 2019-08-20
  • 2011-01-07
相关资源
最近更新 更多