C++ 在函数调用中声明数组
好的,我知道这在C++0x/C++11中是可能的,因此可以在Visual Studio 2012中完成 但是,我正在运行VisualStudio2010。我想知道是否有可能做类似的事情:C++ 在函数调用中声明数组,c++,arrays,visual-studio-2010,C++,Arrays,Visual Studio 2010,好的,我知道这在C++0x/C++11中是可能的,因此可以在Visual Studio 2012中完成 但是,我正在运行VisualStudio2010。我想知道是否有可能做类似的事情: void MyFunction(int myArray[]) {} MyFunction({1,2,3}) 而不必事先声明数组 在C++ Visual Studio 2010版本中使用了任何可行的方法吗?或者以某种方式更新VisualStudio2010使用的编译器以支持更多C++11功能?还是我别无选择 编
void MyFunction(int myArray[])
{}
MyFunction({1,2,3})代码>
而不必事先声明数组
<>在C++ Visual Studio 2010版本中使用了任何可行的方法吗?或者以某种方式更新VisualStudio2010使用的编译器以支持更多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;
}
}
void TestFunction(std::vector myArray)
{
对于(std::vector::size_type i=0;i std::coutVisual Studio中的大纲C++11支持表示VC10或VC11中不支持。在Visual Studio 2010或2012中不可能实现。抱歉!我不确定您的确切用例,但您可能可以使用它来实现这一点。是的,它在VC10中确实有效
如评论中所述,可以这样做:
TestFunction(boost::assign::list_of(1)(2)(3));
<> Pc++ C++唯一支持这个的版本(Visual C++)是Visual C++ 2013预览。
如果你真的打算这么做,你可以定义一个vector_builder类,它可以让你在一行中完成这项工作——但有几个限制条件:首先,它必须是一个向量而不是数组,其次,执行这项工作的语法非常难看而且违反直觉(甚至我都不愿意提及它)
正如我所说,这让我觉得很难看,以至于我不愿意提及它——但你可能更喜欢它,而不是可用的替代品。为什么不起作用的可能重复?这在VC11(VS2012)中也不受支持,但在VC12(VS2013预览版)中可用我似乎记得Boost在这个领域有一个库(指定给STL容器)。我在C语言中,可以做一些事情,比如“代码> int [],新的INT[] } 1, 2, 3,<代码>,但不是C++。我想在你的示例用法代码中有一个额外的开放括号(在代码> 1代码/代码>之前)。应该是<代码>(MakEvECT(1))。,2,3))
,我相信。加上1,指出这种类型的编码风格有多么丑陋。TestFunction(boost::assign::list_of(1)(2)(3));
谢谢!:D
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));