2

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

但是,我正在运行 Visual Studio 2010。我想知道是否有可能做类似的事情:

void MyFunction(int myArray[])
{}

MyFunction({1,2,3});

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

在 C++ Visual Studio 2010 使用的版本中是否有任何解决方法?或者以某种方式更新 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));

4

4 回答 4

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));

正如我所说,这让我感到非常难看,以至于我根本不愿提及它——但您可能更喜欢它而不是可用的替代品。

于 2013-08-15T22:58:08.363 回答
1

我不确定您的确切用例,但您可能可以使用Boost.Assign来执行此操作。是的,它确实在 VC10 中工作。

正如评论中发布的那样,可以这样做:

TestFunction(boost::assign::list_of(1)(2)(3));
于 2013-08-15T22:56:14.237 回答
0

概述 Visual Studio 中 C++11 支持的MSDN 页面指出, VC10VC11不支持初始化程序列表。

于 2013-08-15T22:44:47.957 回答
0

就此而言,在 Visual Studio 2010 或 2012 中是不可能的。对不起!

于 2013-08-15T22:45:17.363 回答