【问题标题】:Initialising std::pair<double, std::array<std::pair<double, double>, 3> >初始化 std::pair<double, std::array<std::pair<double, double>, 3> >
【发布时间】:2016-10-12 09:38:43
【问题描述】:

谁能就以下代码中 std::vector::push_back 调用中的 std::make_pair 调用的正确语法提出建议:

#include <array>
#include <vector>
#include <utility>

int main()
{
    typedef std::pair<double, double> PairType;
    std::vector<std::pair<double, std::array<PairType, 3> > > myVector;

    double Key = 0.0;
    PairType Pair1 = std::make_pair(1.0, 2.0);
    PairType Pair2 = std::make_pair(3.0, 4.0);
    PairType Pair3 = std::make_pair(5.0, 6.0);

    myVector.push_back(std::make_pair(Key, { Pair1, Pair2, Pair3 } )); // Syntax Error

    return 0;
}

编译器(MS VS2015.2)无法确定std::make_pair调用中第二个参数的类型,这可以理解但我不知道如何启发它。

【问题讨论】:

标签: c++ std-pair stdarray


【解决方案1】:

编译器似乎无法确定{ Pair1, Pair2, Pair3 } 是三对的std::array。明确指定类型应该有效:

myVector.push_back(std::make_pair(Key, std::array<PairType,3>{ Pair1, Pair2, Pair3 } ));

Demo.

【讨论】:

    【解决方案2】:

    如果编译器支持Library fundamentals v2,你可以使用std::experimental::make_array

    using std::experimental::make_array;
    myVector.push_back(std::make_pair(Key, make_array(Pair1, Pair2, Pair3) ));
    

    LIVE from GCC

    【讨论】:

    • 或者只写make_array,因为它并不长。
    • @Yakk 带有using std::experimental::make_array;?当然。
    • 不,写实现,如果你没有它。这是一个简短的函数。
    猜你喜欢
    • 1970-01-01
    • 2021-06-26
    • 1970-01-01
    • 2021-03-19
    • 2016-01-24
    • 2018-01-13
    • 1970-01-01
    • 2019-05-18
    • 1970-01-01
    相关资源
    最近更新 更多