如何部分专用化函数模板
How can I partially specialize a function template?
我无法解释为什么在下面的情况下无法实现部分模板专业化。有什么技术原因吗?最重要的是,是否有任何解决方法可以使其工作?
template <int a, int b>
void foo();
// DO NOT COMPILE
template <int a>
void foo<a, 999>() {
}
// COMPILE
template <>
void foo<999, 999>() {
}
template <int a, int b>
void foo() {
}
您可以使用结构进行部分专用化:
template <int a, int b> struct foo_helper { void operator()() { /*code*/ } };
template <int a> struct foo_helper<a, 999> { void operator()() { /*code*/ } };
template <> struct foo_helper<999, 999> { void operator()() { /*code*/ } };
template <int a, int b>
void foo()
{
foo_helper<a, b>{}();
}
函数不能部分专用化。通常,重载函数或使用SFINAE要容易得多。
如果不可能 - 就像在这种情况下,因为 SFINAE 和重载只能处理类型 - 可以部分地将具有所述函数的类作为静态成员 - 尽管它通常更类型化。
相关文章:
- 具有常量引用参数的函数模板专用化
- 如何减少函数模板专用化?
- 类成员函数的函数模板专用化
- 使用类指针重载C++命名空间函数模板专用化替代方法?
- 类和成员函数模板专用化出错
- C++ 模板化基类的函数模板专用化
- C++函数模板专用化和重载
- 函数模板专用化生成链接错误
- 视图和跨步视图以及常量噩梦的函数模板专用化
- 函数模板专用化语法聚合模板化类型
- 澄清了使用 enable_if 的成员函数模板专用化
- 带有 clang 的 MacOSX 中的函数模板专用化
- 模板化函数模板专用化
- 在C++中创建成员函数模板专用化
- C++ 中的函数模板专用化和右值引用
- 命名空间中的函数模板专用化
- 常量和非常量 gsl::span 参数的函数模板专用化
- 如何选择函数模板专用化
- C++单个构造函数模板专用化
- 这是部分函数模板专用化