是的,我知道这在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));
答案 0 :(得分:2)
Visual C ++唯一支持此版本的版本是Visual C ++ 2013 Preview。
如果您真的设置了这样做,您可以定义一个vector_builder类,将让您在一行中完成工作 - 只需几个附带条件:首先,它几乎 必须是一个向量而不是一个数组,其次,执行该工作的语法相当丑陋且反直觉(至关重要)我甚至毫不犹豫地提到它。
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));
正如我所说,这让我感到非常难看,以至于我毫不犹豫地提及它 - 但你可能更愿意选择它。
答案 1 :(得分:1)
我不确定您的确切用例,但您可以使用Boost.Assign来执行此操作。是的,它确实在VC10中有效。
正如评论中所发表的那样,人们可以这样做:
TestFunction(boost::assign::list_of(1)(2)(3));
答案 2 :(得分:0)
Visual Studio中MSDN page概述C ++ 11支持声明VC10 或 VC11不支持initialiser lists。
答案 3 :(得分:0)
在Visual Studio 2010或2012年不可能。遗憾!