我可以在单一类型上定义可变参数模板函数吗?

托维

是否可以不为类型变化的模板函数定义类型,而仅为单个函数定义如果我的目标是定义一个仅添加可变数量的int,但不添加浮点数或其他任何功能的函数,我可以通过某种template<int....>语法来实现此功能吗?

我可以轻松组合的多类型样本:

int add() { return 0; }

template<typename T, typename... TS>
T add(T n, TS... m)
  { return n+add(m...); }

但是,我int如何使用呢?显然,它不能遵循将模式放入<int>template-argument-list的模式,因为我想要一个函数,该函数在(...)和之间不接受参数<...>如下所示:

template<int n>
int constant() { return n; }

constant<4>();  // using the int-template function

对我来说很明显,因此以下操作无效。但是作为起点...

template<int, int...>
int add(int n, int... m)    // error, of course.
  { return n+add(m...); }

我如何可以定义addadd(1)add(1,2)add(1,2,3)等,但只针对int-Arguments。它不应该为生成float-function add(1.0)(可能是该调用将起作用,但仅是因为1.0将其转换为int)。

注:我这样做,只会限制类型没有任何意义TTS打倒enable_if或此类。我只是认为我在这里可能错过了这种可变参数模板的语法。

亚伦曼

为此,您实际上应该只使用std::initializer_list,它与仅一种类型的可变参数函数非常相似。

int add(std::initializer_list<int> list) {
    int sum = 0;
    for (auto i : list) sum += i;
    return sum;
}  

现在您可以这样称呼它 int i = add({1,2,3,4,5,6});

如果您确实想要,可以轻松地添加一个静态断言,这将为您完成此工作。

int add() { return 0; }

template<typename T, typename... TS>
T add(T n, TS... m)
{
   static_assert(std::is_same<T,int>::value,"bad type"); 
   return n+add(m...); 
}  

但是,这完全违背了可变参数模板的目的,并使程序更难于读写。

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

我可以强制可变参数模板采用特定类型的参数吗?

来自分类Dev

可以在可变参数模板中推导容器类型吗?

来自分类Dev

对Haskell的介绍很温柔:“ ....没有一个单一类型同时包含2和'b'。” 我可以不做这样的类型吗?

来自分类Dev

我可以在不传递args的情况下从可变参数模板类型获取typeid吗?

来自分类Dev

我可以使用非模板类专门化可变参数模板模板参数吗?

来自分类Dev

我可以使用非模板类专门化可变参数模板模板参数吗?

来自分类Dev

类型受限的可变参数模板函数

来自分类Dev

Haskell:实例参数化类型一个单一类型

来自分类Dev

如何使可变参数模板类方法以函数指针作为从函数模板派生的类型作为参数?

来自分类Dev

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

来自分类Dev

C ++参数包,是否必须具有单一类型的实例?

来自分类Dev

基于模板参数构建带有一组函数重载的可变参数模板类?

来自分类Dev

可变参数模板参数:我可以根据类型选择引用还是值?

来自分类Dev

可变参数模板参数:我可以根据类型选择引用还是值?

来自分类Dev

Ruby:单一类型元素的数组

来自分类Dev

Ruby:单一类型元素的数组

来自分类Dev

在可变参数模板类型列表的每种类型上运行的函数

来自分类Dev

可变参数模板类中的派生(虚拟)函数参数

来自分类Dev

可变参数模板函数确定函数指针的返回类型

来自分类Dev

可变参数模板函数确定函数指针的返回类型

来自分类Dev

从可变参数模板类中提取类型以实现成员函数重载

来自分类Dev

是否可以修复可变参数模板函数的参数?

来自分类Dev

可变参数模板类的可变参数模板

来自分类Dev

可变参数模板类的可变参数模板

来自分类Dev

我们可以在同一类型上使用两次寄存器插值器吗

来自分类Dev

用可变参数模板参数调用零参数模板函数指针吗?

来自分类Dev

我可以为模板类的模板类型添加参数吗

来自分类Dev

C ++ 11翻译可变参数模板以推断类类型

来自分类Dev

错误:可变参数模板类的类型不完整

Related 相关文章

  1. 1

    我可以强制可变参数模板采用特定类型的参数吗?

  2. 2

    可以在可变参数模板中推导容器类型吗?

  3. 3

    对Haskell的介绍很温柔:“ ....没有一个单一类型同时包含2和'b'。” 我可以不做这样的类型吗?

  4. 4

    我可以在不传递args的情况下从可变参数模板类型获取typeid吗?

  5. 5

    我可以使用非模板类专门化可变参数模板模板参数吗?

  6. 6

    我可以使用非模板类专门化可变参数模板模板参数吗?

  7. 7

    类型受限的可变参数模板函数

  8. 8

    Haskell:实例参数化类型一个单一类型

  9. 9

    如何使可变参数模板类方法以函数指针作为从函数模板派生的类型作为参数?

  10. 10

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

  11. 11

    C ++参数包,是否必须具有单一类型的实例?

  12. 12

    基于模板参数构建带有一组函数重载的可变参数模板类?

  13. 13

    可变参数模板参数:我可以根据类型选择引用还是值?

  14. 14

    可变参数模板参数:我可以根据类型选择引用还是值?

  15. 15

    Ruby:单一类型元素的数组

  16. 16

    Ruby:单一类型元素的数组

  17. 17

    在可变参数模板类型列表的每种类型上运行的函数

  18. 18

    可变参数模板类中的派生(虚拟)函数参数

  19. 19

    可变参数模板函数确定函数指针的返回类型

  20. 20

    可变参数模板函数确定函数指针的返回类型

  21. 21

    从可变参数模板类中提取类型以实现成员函数重载

  22. 22

    是否可以修复可变参数模板函数的参数?

  23. 23

    可变参数模板类的可变参数模板

  24. 24

    可变参数模板类的可变参数模板

  25. 25

    我们可以在同一类型上使用两次寄存器插值器吗

  26. 26

    用可变参数模板参数调用零参数模板函数指针吗?

  27. 27

    我可以为模板类的模板类型添加参数吗

  28. 28

    C ++ 11翻译可变参数模板以推断类类型

  29. 29

    错误:可变参数模板类的类型不完整

热门标签

归档