gpt4 book ai didi

c++ - 在函数调用中声明数组

转载 作者:搜寻专家 更新时间:2023-10-31 01:48:09 24 4
gpt4 key购买 nike

是的,我知道这在 C++0x/C++11 中是可能的,因此可以在 Visual Studio 2012 中完成。

但是,我正在运行 Visual Studio 2010。我想知道是否可以执行类似于以下操作的操作:

void MyFunction(int myArray[])
{}

MyFunction({1,2,3});

无需事先声明数组带来的不便。

在 Visual Studio 2010 使用的 C++ 版本中是否有解决方法?或者以某种方式更新 Visual Studio 2010 用于支持更多 C++11 功能的编译器?还是我别无选择?

编辑:

感谢 yzt,我已经能够使用 Boost 做到这一点!

这里有一些示例代码,以防其他人碰巧处于我的位置(我似乎无法对此使用普通数组,但是 std::vector (或者实际上另一个 STL 容器)等就可以了!):

函数:

void TestFunction(std::vector<int> myArray)
{
for(std::vector<int>::size_type i = 0; i < myArray.size(); ++i)
{
std::cout<<myArray[i]<<std::endl;
}
}

调用它:

TestFunction(boost::assign::list_of(1)(2)(3));

最佳答案

唯一直接支持此功能的 Visual C++ 版本(目前)是 Visual C++ 2013 预览版。

如果您真的打算这样做,您可以定义一个 vector_builder 类,让您在一行中完成这项工作——有一些附带条件:首先,它几乎确实必须是 vector 而不是数组,其次,完成这项工作的语法相当丑陋且违反直觉(到点上我什至不愿提及它)。

template<class T>
class make_vector {
std::vector<T> data;
public:
make_vector(T const &val) {
data.push_back(val);
}

make_vector<T> &operator,(T const &t) {
data.push_back(t);
return *this;
}

operator std::vector<T>() { return data; }
};

template<class T>
make_vector<T> makeVect(T const &t) {
return make_vector<T>(t);
}

有了这个,你会调用类似的东西:

MyFunction((makeVect(1),2,3));

正如我所说,这让我觉得很丑陋,以至于我根本不愿提及它——但你可能更喜欢它而不是可用的替代品。

关于c++ - 在函数调用中声明数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18262940/

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