gpt4 book ai didi

c++ - 转换依赖于 std::vector 初始化列表构造函数的 C++11 代码

转载 作者:太空狗 更新时间:2023-10-29 23:05:28 24 4
gpt4 key购买 nike

因为 Microsoft 不支持使用初始化列表构造 std::vector 的 C++11 功能。不幸的是,我需要重构一些代码以用于 VS 编译器。

我能想到的最好方法是使用 array pointer and length constructor对于 vector .以前我这样做过:

MyClass(std::initializer_list<T> init):myStdVector(init){

这让我可以做一些不错的事情,比如:

MyClass hi({1,2,3,4});

我认为合适的项目数量可变。

如何通过直接传递数组来实现同样的优雅?是否可以在函数参数中实际初始化数组?

我可以这样做:

MyClass(T*initArray,int arraySize):myStdVector(initArray,initArray+arraySize){

但是我必须这样做:

 int whatever[4]={1,2,3,4};
MyClass hi(whatever,4);

看起来笨重。也许我缺少更好的解决方案?

最佳答案

是的,让你的构造函数成为一个模板,并通过引用接受一个数组。它需要是一个模板,因为数组长度将是一个推导参数:template<int N> MyClass::MyClass(int (&array)[N]) { } .当你通过 int whatever[4] , N 显然推导出为 4。

[编辑]在 C++11 之前,片段 {1,2,3,4}在数组和 POD 结构的声明之外没有任何意义。 MyClass两者都不是,这意味着拥有合适类型的声明并使用它来初始化 MyClass 是不可避免的在下一行。

关于c++ - 转换依赖于 std::vector 初始化列表构造函数的 C++11 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19265529/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com