专业化可变参数模板成员函数

帕斯卡

有没有办法使这种“伪超载”参数专门化起作用?

#include <iostream>

class Foo
{
public:
  template < typename T, typename ... Args > 
  T* bar (Args&& ... args);
};

template <> 
int* Foo::bar()
{
  std::cout << "int* bar()\n";
  return new int;
}

// error: template-id ‘bar<>’ for ‘double* Foo::bar(double)’ does not match any template declaration
template <> 
double* Foo::bar(double d)
{
  std::cout << "double* bar(" << d << ")\n";
  return new double;
}

int main()
{
  Foo f;
  f.bar<int>();
  f.bar<double>(3.0);
}

一种解决方案是实际重载该函数,例如

class Foo
{
public:
  template < typename T, typename ... Args > 
  T* bar (Args&& ... args);
  template < typename T, typename U > 
  T* bar (U u);
};

但如果可能的话,我宁愿避免这种情况。我正在查看返回类型和参数的数十种允许组合,因此重载是不切实际的。

我认为一些SFINAE魔术应该可以仅启用返回类型和参数的非常特定的组合,但是我觉得我可能缺少一个更简单的选项。

songyuanyao

错误消息指出,特殊化double的参数类型与主模板的参数类型不匹配Args&&

主要模板正在应用转发参考,该参考可以实例化为左值参考或右值参考。对于右值引用(与中的用法匹配main()),专业化应为

template <> 
double* Foo::bar(double&& d)
{
  std::cout << "double* bar(" << d << ")\n";
  return new double;
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

可变参数递归模板记忆乐趣专业化

来自分类Dev

类模板的可变构造函数模板的专业化

来自分类Dev

可变参数模板功能的专业化

来自分类Dev

C ++中模板类的成员函数的专业化

来自分类Dev

模板专业化-成员函数

来自分类Dev

[Args ...]为空的可变参数模板的部分模板专业化

来自分类Dev

如何基于作为STL容器的模板参数模拟所选成员函数的部分专业化?

来自分类Dev

源文件中成员函数模板的显式专业化

来自分类Dev

可变参数模板成员函数的部分专业化

来自分类Dev

C ++-可变参数模板部分专业化

来自分类Dev

可变参数模板与类模板的专业化

来自分类Dev

函数模板C ++的显式专业化

来自分类Dev

C ++构造函数模板专业化

来自分类Dev

C ++可变参数模板方法专业化

来自分类Dev

模板专业化:成员函数的参数不同于T

来自分类Dev

函数模板的显式专业化声明中的尾随模板参数推导(无函数参数推导)

来自分类Dev

递归可变参数模板的基本案例专业化

来自分类Dev

可变参数模板的部分专业化需要第一个非可变模板参数

来自分类Dev

可变参数可变参数模板模板专业化错误

来自分类Dev

如何使用可变参数模板处理模板专业化?

来自分类Dev

为什么可变参数模板的模板专业化与非可变模板的专业化不同?

来自分类Dev

模板专业化-成员函数

来自分类Dev

[Args ...]为空的可变参数模板的部分模板专业化

来自分类Dev

C ++ 11类模板方法专业化和可变参数模板

来自分类Dev

可变参数模板函数名称查找无法找到专业化

来自分类Dev

VS2015:可变参数模板专业化

来自分类Dev

可变参数模板与类模板的专业化

来自分类Dev

可变参数模板类-可变参数成员函数

来自分类Dev

模板类成员函数的专业化

Related 相关文章

  1. 1

    可变参数递归模板记忆乐趣专业化

  2. 2

    类模板的可变构造函数模板的专业化

  3. 3

    可变参数模板功能的专业化

  4. 4

    C ++中模板类的成员函数的专业化

  5. 5

    模板专业化-成员函数

  6. 6

    [Args ...]为空的可变参数模板的部分模板专业化

  7. 7

    如何基于作为STL容器的模板参数模拟所选成员函数的部分专业化?

  8. 8

    源文件中成员函数模板的显式专业化

  9. 9

    可变参数模板成员函数的部分专业化

  10. 10

    C ++-可变参数模板部分专业化

  11. 11

    可变参数模板与类模板的专业化

  12. 12

    函数模板C ++的显式专业化

  13. 13

    C ++构造函数模板专业化

  14. 14

    C ++可变参数模板方法专业化

  15. 15

    模板专业化:成员函数的参数不同于T

  16. 16

    函数模板的显式专业化声明中的尾随模板参数推导(无函数参数推导)

  17. 17

    递归可变参数模板的基本案例专业化

  18. 18

    可变参数模板的部分专业化需要第一个非可变模板参数

  19. 19

    可变参数可变参数模板模板专业化错误

  20. 20

    如何使用可变参数模板处理模板专业化?

  21. 21

    为什么可变参数模板的模板专业化与非可变模板的专业化不同?

  22. 22

    模板专业化-成员函数

  23. 23

    [Args ...]为空的可变参数模板的部分模板专业化

  24. 24

    C ++ 11类模板方法专业化和可变参数模板

  25. 25

    可变参数模板函数名称查找无法找到专业化

  26. 26

    VS2015:可变参数模板专业化

  27. 27

    可变参数模板与类模板的专业化

  28. 28

    可变参数模板类-可变参数成员函数

  29. 29

    模板类成员函数的专业化

热门标签

归档