在C ++中没有匹配的构造函数来初始化可变参数模板

用户名

尝试学习Variadic templates并且不知道为什么无法编译,错误是:no matching constructor for initialization of 'test<>'

在讨论过程中,我想通过在代码中阐明我的意见来提出第二个问题。

template <typename ...Args>     // this is just how Variadic template are defined
class test {
 public:
 int arr[sizeof...(Args)];       // this is packing or unpacking? why are 
                                 // dots outside of bracket?

 test(Args... arg)               // this is called packing?
               : arr{arg...}{}   // this is called un-packing?
};

int main(){
 test<> t(1,2,3);
 return 0;
}

编辑:似乎我需要做test <int, int, int>,但为什么我必须这样做,因为另一个示例按原样工作:

template <typename ...Args> 
int func(Args... arg)
{
   int a[] = {arg...};
   return sizeof...(arg);
}

int main(void)
{
    std::cout << func(1,2,3,4,5,6) << std::endl;
    return 0;
}

func不需要该<int, int ,int..部分。

胡桃夹子

您的第一个示例不起作用,因为您需要指定以下类型:

int main() {
    test<int, int, int> t(1,2,3);
    return 0;
}

如果您能够使用C ++ 17,则可以利用类模板参数推导的优势,例如:

int main() {
   test t(1,2,3);
   return 0;
}

但是在C ++ 17之前,存在类模板参数推导 但是,存在函数模板参数推导这就是为什么第二个示例无需显式指定模板类型即可工作的原因。

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

vscode中的C ++:错误:没有匹配的构造函数来初始化'std :: thread'

来自分类Dev

C ++中没有参数可变参数模板函数

来自分类Dev

C ++没有匹配的构造函数的[]初始化

来自分类Dev

没有用于初始化可变参数模板类的匹配构造函数

来自分类Dev

是否可以编写可变参数模板构造函数来初始化类/结构的所有成员?

来自分类Dev

返回C ++对象时,“没有匹配的构造函数用于初始化”

来自分类Dev

C ++错误:没有匹配的构造函数用于初始化

来自分类Dev

通过可变参数模板的C ++ 11构造函数继承

来自分类Dev

通过可变参数模板的C ++ 11构造函数继承

来自分类Dev

没有构造函数的C ++零初始化

来自分类Dev

C ++可变参数模板:无法匹配函数

来自分类Dev

C ++中的可调用类对象:没有匹配的函数来调用'std :: tuple <T> :: tuple(<括号包围的初始化程序列表>)'

来自分类Dev

如何在C ++中调用可变参数模板构造函数?

来自分类Dev

在C ++中可变参数模板中是否有对函数参数实施类型限制的好方法?

来自分类Dev

C ++中的初始化程序列表和类初始化。我有无参数构造函数,但仍必须使用初始化列表?

来自分类Dev

错误C2512:没有合适的默认构造函数-为什么在构造函数中初始化属性?

来自分类Dev

如何专门化C ++中的可变参数模板函数?

来自分类Dev

用可变参数模板在C ++中包装函数指针

来自分类Dev

在可变参数模板类的构造函数中初始化元组成员

来自分类Dev

获取在C ++ 11中具有可变参数模板的函数的地址

来自分类Dev

C ++可变参数模板参数方法传递给没有可变参数的方法

来自分类Dev

为什么可变参数函数不能“吃掉” C ++ 11中的列表初始化参数?

来自分类Dev

为什么可变参数函数不能“吃掉” C ++ 11中的列表初始化参数?

来自分类Dev

c ++初始化模板类构造函数

来自分类Dev

C ++ SFINAE双嵌套的initializer_list与可变参数模板构造函数

来自分类Dev

如何在Objective C的参数化构造函数中初始化NSDate?

来自分类Dev

c ++构造函数成员初始化:传递参数

来自分类Dev

C ++:如何在可变参数模板参数上调用带有类型参数的函数?

来自分类Dev

C ++类:在没有构造函数重载的情况下初始化属性

Related 相关文章

  1. 1

    vscode中的C ++:错误:没有匹配的构造函数来初始化'std :: thread'

  2. 2

    C ++中没有参数可变参数模板函数

  3. 3

    C ++没有匹配的构造函数的[]初始化

  4. 4

    没有用于初始化可变参数模板类的匹配构造函数

  5. 5

    是否可以编写可变参数模板构造函数来初始化类/结构的所有成员?

  6. 6

    返回C ++对象时,“没有匹配的构造函数用于初始化”

  7. 7

    C ++错误:没有匹配的构造函数用于初始化

  8. 8

    通过可变参数模板的C ++ 11构造函数继承

  9. 9

    通过可变参数模板的C ++ 11构造函数继承

  10. 10

    没有构造函数的C ++零初始化

  11. 11

    C ++可变参数模板:无法匹配函数

  12. 12

    C ++中的可调用类对象:没有匹配的函数来调用'std :: tuple <T> :: tuple(<括号包围的初始化程序列表>)'

  13. 13

    如何在C ++中调用可变参数模板构造函数?

  14. 14

    在C ++中可变参数模板中是否有对函数参数实施类型限制的好方法?

  15. 15

    C ++中的初始化程序列表和类初始化。我有无参数构造函数,但仍必须使用初始化列表?

  16. 16

    错误C2512:没有合适的默认构造函数-为什么在构造函数中初始化属性?

  17. 17

    如何专门化C ++中的可变参数模板函数?

  18. 18

    用可变参数模板在C ++中包装函数指针

  19. 19

    在可变参数模板类的构造函数中初始化元组成员

  20. 20

    获取在C ++ 11中具有可变参数模板的函数的地址

  21. 21

    C ++可变参数模板参数方法传递给没有可变参数的方法

  22. 22

    为什么可变参数函数不能“吃掉” C ++ 11中的列表初始化参数?

  23. 23

    为什么可变参数函数不能“吃掉” C ++ 11中的列表初始化参数?

  24. 24

    c ++初始化模板类构造函数

  25. 25

    C ++ SFINAE双嵌套的initializer_list与可变参数模板构造函数

  26. 26

    如何在Objective C的参数化构造函数中初始化NSDate?

  27. 27

    c ++构造函数成员初始化:传递参数

  28. 28

    C ++:如何在可变参数模板参数上调用带有类型参数的函数?

  29. 29

    C ++类:在没有构造函数重载的情况下初始化属性

热门标签

归档